Progetto Bash: Introduzione. Le operazioni aritmetiche #2
Per eseguire operazioni aritmetiche in bash possiamo usare:
a. il comando "let" (che abbiamo già visto)
b. il comando "expr"
c. Il costrutto $((espressione))
Iniziamo dal comando "expr".
Come il comando let, anche expr esegue operazioni aritmetiche e ne archivia il risultato in una variabile.
iniziamo dall'addizione
Date due variabili con il corrispettivo valore
$ a=10
$ b=5
"expr" esegue la somma dei valori delle due variabili e assegna il risultato alla variabile "a"
$ a=`expr $a + $b`
infatti se faccio
$ echo $a
avrò come risultato
15
NB "expr" deve essere incluso tra gli apici inversi, che, come sapete, si formano con la combinazione Alt Gr+?. Al posto degli apici inversi può essere utilizzata anche la nuova forma $( comando ). Lightuono ne ha parlato già qui.
Vediamo ora solo gli esempi con gli altri operatori aritmetici
Sottrazione
$ a=10
$ b=5
$ a=`expr $a - $b`
$ echo $a
5 #risultato
Moltiplicazione
$ a=10
$ b=5
$ a=`expr $a \* $b`
$ echo $a
50 #risultato
NB L'operatore di moltiplicazione "*" deve essere usato con l'escaping "\" altrimenti bash restituirà: "expr: errore di sintassi"
Divisione
$ a=10
$ b=5
$ a=`expr $a / $b`
$ echo $a
2 #risultato
Modulo (restituisce il resto di una divisione)
$ a=10
$ b=6
$ a=`expr $a % $b`
$ echo $a
4 #risultato
Il discorso non cambia con il costrutto $((espressione))
Infatti
$ a=10
$ b=5
$ a=$(($a+$b))
$ echo $a
15 #risultato
Una variante al costrutto $((espressione)) è $[espressione].
infatti
$ a=10
$ b=5
$ a=$[$a+$b]
$ echo $a
Se invece si vogliono eseguire semplici operazioni con bash, si può fare così
$ echo $[30*60]
$ echo $[30+60]
$ echo $[30-60]
$ echo $[60/30]
Una cosa da tener presente è che Bash non contempla l'aritmetica in virgola mobile, cioè operazioni tra numeri decimali, bensi solo tra numeri interi.
Infatti
$ a=11.5
$ b=7
$ a=$(($a+$b))
Bash ci restituirà
bash: 11.5+7: syntax error: invalid arithmetic operator (error token is ".5+7")
Perchè?
Perchè bash considera i numeri che contengono il punto decimale come stringhe
Perciò, se negli script sono necessari operazioni aritmetiche con numeri decimali, si può ricorrere al comando bc
esempi
$ a=11.5
$ b=7
$ a=$(echo $a+$b | bc)
$ echo $a
18.5
$ a=11.5
$ b=7
$ a=$(echo $a-$b | bc)
$ echo $a
4.5
$ a=11.5
$ b=7
$ a=$(echo $a*$b | bc)
$ echo $a
80.5
$ a=7
$ b=11
$ a=$(echo "scale=3; $a / $b" | bc)
$ echo $a
.636
Vi raccomando, esercitatevi ;)
Io & Lightuono
Vi state esercitando ? Alla fine del capitolo 1 ci saranno alcuni esercizi da svolgere :D :D
RispondiElimina@Lightuono
RispondiEliminaSperiamo che continueranno a seguirci nonostante la tua dichiarazione sconvolgente :D :D :D