mercoledì 22 giugno 2011

Progetto Bash: Introduzione. Quinta parte.

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

2 commenti:

  1. Vi state esercitando ? Alla fine del capitolo 1 ci saranno alcuni esercizi da svolgere :D :D

    RispondiElimina
  2. @Lightuono
    Speriamo che continueranno a seguirci nonostante la tua dichiarazione sconvolgente :D :D :D

    RispondiElimina