Workstation online OnWorks Linux e Windows

Logo

Hosting online gratuito per workstation

<Precedenti | Contenuti | Succ.>

Assegnazione

Sebbene il suo utilizzo possa non essere immediatamente evidente, le espressioni aritmetiche possono eseguire assegnazioni. Abbiamo eseguito assegnazioni molte volte, sebbene in contesti diversi. Ogni volta che assegniamo un valore a una variabile, eseguiamo un'assegnazione. Possiamo farlo anche all'interno di espressioni aritmetiche:



[io@linuxbox~]$ pippo=

[io@linuxbox~]$ echo $foo


[io@linuxbox~]$ if (( foo = 5 )); then echo "È vero."; fi

È vero.

[io@linuxbox~]$ echo $foo

5

[io@linuxbox~]$ pippo=

[io@linuxbox~]$ echo $foo


[io@linuxbox~]$ if (( foo = 5 )); then echo "È vero."; fi

È vero.

[io@linuxbox~]$ echo $foo

5


Nell'esempio sopra, assegniamo prima un valore vuoto alla variabile foo e verifichiamo che sia effettivamente vuoto. Successivamente, eseguiamo un if con il comando composto (( pippo = 5

)). Questo processo fa due cose interessanti: 1) assegna il valore 5 alla variabile

foo e 2) viene valutato come true perché a foo è stato assegnato un valore diverso da zero.


Immagine

Nota: È importante ricordare il significato esatto del = nell'espressione sopra. Un singolo = esegue l'incarico. pippo = 5 dice "fare foo uguale a 5", mentre == valuta l'equivalenza. pippo == 5 dice "fa foo uguale a 5?" Questa è una caratteristica comune in molti linguaggi di programmazione. Nella shell, questo può essere un po' confuso perché test il comando accetta un singolo = per l'equivalenza delle stringhe. Un altro motivo per usare il più moderno [[]] e (( )) comandi composti al posto di test.


Immagine

Oltre a un =, la shell fornisce anche notazioni che eseguono alcune assegnazioni molto utili:


Tabella 34-4: Operatori di assegnazione


Notazione Descrizione

Notazione Descrizione


Immagine

parametro = APPREZZIAMO Compito semplice. Assegnazioni APPREZZIAMO a parametro.


Immagine

parametro += APPREZZIAMO Addizione. Equivalente a parametro = parametro +

valore.


Immagine

parametro -= APPREZZIAMO Sottrazione. Equivalente a parametro = parametro -

valore.


Immagine

parametro *= APPREZZIAMO Moltiplicazione. Equivalente a parametro = parametro

* valore.


Immagine

parametro /= APPREZZIAMO Divisione intera. Equivalente a parametro =

parametro/valore.


Immagine

parametro %= APPREZZIAMO Modulo. Equivalente a parametro = parametro %

valore.


Immagine

parametro++ Variabile post-incremento. Equivalente a parametro =

parametro + 1 (tuttavia, vedere la discussione di seguito).


Immagine

parametro−− Post-decremento variabile. Equivalente a parametro =

parametro − 1.


Immagine

++parametro Pre-incremento variabile. Equivalente a parametro =

parametro + 1.


Immagine

--parametro Pre-decremento variabile. Equivalente a parametro =

parametro − 1.


Immagine


Questi operatori di assegnazione forniscono una comoda scorciatoia per molte comuni operazioni aritmetiche. Di particolare interesse sono gli operatori di incremento (++) e decremento (−−), che aumentano o diminuiscono il valore dei loro parametri di uno. Questo stile di notazione è tratto dal linguaggio di programmazione C ed è stato incorporato in numerosi altri linguaggi di programmazione, tra cui bash.

Gli operatori possono apparire all'inizio o alla fine di un parametro. Sebbene entrambi incrementino o decrementino il parametro di uno, i due posizionamenti presentano una sottile differenza. Se posizionati all'inizio del parametro, il parametro viene incrementato (o decrementato) prima che venga restituito. Se posizionati dopo, l'operazione viene eseguita. dopo Il parametro viene restituito. È piuttosto strano, ma è il comportamento previsto. Ecco una dimostrazione:



[io@linuxbox~]$ pippo=1 [io@linuxbox~]$ echo $((foo++)) 1

[io@linuxbox~]$ echo $foo

[io@linuxbox~]$ pippo=1 [io@linuxbox~]$ echo $((foo++)) 1

[io@linuxbox~]$ echo $foo


2

2


Se assegniamo il valore uno alla variabile foo e poi incrementarlo con il ++ operatore posizionato dopo il nome del parametro, foo viene restituito con il valore uno. Tuttavia, se guardiamo il valore della variabile una seconda volta, vediamo il valore incrementato. Se inseriamo ++ operatore davanti al parametro, otteniamo il comportamento più atteso:


[io@linuxbox~]$ pippo=1 [io@linuxbox~]$ echo $((++foo)) 2

[io@linuxbox~]$ echo $foo

2

[io@linuxbox~]$ pippo=1 [io@linuxbox~]$ echo $((++foo)) 2

[io@linuxbox~]$ echo $foo

2


Per la maggior parte delle applicazioni shell, l'aggiunta del prefisso all'operatore sarà la soluzione più utile.

Gli operatori ++ e -- vengono spesso utilizzati insieme ai cicli. Apporteremo alcuni miglioramenti al nostro script modulo per renderlo un po' più fluido:



#! / Bin / bash

# modulo2: dimostra l'operatore modulo per ((i = 0; i <= 20; ++io )); fare

Se (((5% XNUMX) == 0 )); quindi printf "<%d> " $i

altro

printf "%d " $i

fi fatto

printf "\ n"

#! / Bin / bash

# modulo2: dimostra l'operatore modulo per ((i = 0; i <= 20; ++io )); fare

Se (((5% XNUMX) == 0 )); quindi printf "<%d> " $i

altro

printf "%d " $i

fi fatto

printf "\ n"


Il miglior sistema operativo cloud computing su OnWorks: