2 Le variabili in bash

Le variabili in bash possono contenere dati come numeri o stringhe e sono debolmente tipizzate, ovvero non sarà necessario dichiara precedentemente il tipo di dato da contenere. A seconda del tipo di dato inserito, l’interprete riconoscerà il tipo di variabile. Per quanto riguarda le operazioni aritmetiche di numeri decimali, sarà necessario un altro programma come bc.

Per dichiarare una variabile dobbiamo assegnarle un nome seguito dall’operatore di assegnamento uguale ( = ) e il valore che vogliamo assegnarle

var_a=2
var_b=10
var_c="una stringa"

è buona norma dare un nome alle variabili in minuscolo, nomi brevi e descrittivi e se composti da più parole, separarle da underscore.

Dopo il nome, l’uguale e il valore non si possono utilizzare spazi, come in altri linguaggi.

Per richiamare una variabile, bisogna anteporre al suo nome il simbolo dollaro ( $ )

printf $var_a

stampiamo tutte le variabili

printf "var_a: "
printf $var_a
printf "\n"

printf "var_b: "
printf $var_b
printf "\n"

printf "var_c: "
printf $var_c
printf "\n"

Eseguendolo vediamo che la stampa di $var_c stamperà solo la prima parola (nel nostro caso una).

Per stampare tutto il contenuto di una variabile di tipo stringa bisogna racchiuderla tra doppi apici ( ” )

printf "$var_c"

Concaatenare più comandi

Spesso per rendere il codice più corto e più leggibile, è possibile concatenare più comandi su una sola riga tramite il punto e virgola ( ; )

printf "var_a: "; printf $var_a; printf "\n"
printf "var_b: "; printf $var_b; printf "\n"
printf "var_c: "; printf "$var_c"; printf "\n"

Bisogna usare tale pratica con il corretto buon senso onde evitare di avere de codice illeggibile e più difficilmente manutenibile.

Una buona prassi è quella di invocare le variabili all’interno della stringa

printf "var_a: $var_a \n"
printf "var_b: $var_b \n"
printf "var_c: $var_c \n"

Senza comunque esagerare, anche qui potremmo concatenare tutto su un solo rigo, ma la leggibilità sarebbe atroce.

Si possono utilizzare anche i singoli apici ( ‘ ), ma in questo caso il simbolo del dollaro utilizzato per l’invocazione delle variabili non sarà interpretato e quindi il valore della variabile non verrà letto.

Un altro uso comune è quello di racchiudere il nome della variabile tra parentesi graffe { } subito dopo il dollaro, questo permette anche di non avere spazi dopo l’invocazione della variabile, oltre che altri vantaggi che vedremo più avanti

printf "var_a: ${var_a}test \n"

per eseguire operazioni aritmetiche sulle variabile si utilizza il comando let

let var_sum=var_a+var_b
printf " la somma è: $var_sum\n"

Per eseguire calcoli possiamo anche utilizzare l’operatore di espansione aritmetica che si richiama con doppie parentesi tonde (( )) .

((var_a = var_a + 1))

adesso var_a vale 3.

Per stamparlo direttamente, si deve utilizzare davanti il simbolo del dollaro

printf $((var_a = var_a + 1))

altrimenti genererebbe un errore. Senza il dollaro viene fatta solo l’operazione. per fare ad esempio una moltiplicazione e assegnare il risultato in una variabile dobbiamo utilizzare il dollaro

((var_a = var_a + 1))
var_multi=$((var_a*var_b))
printf "var_multi vale: $var_multi\n"

var_multi vale 30 perchè avevamo sommato 1 a var_a.

Per concatenare delle stringhe, basta aggiungere il valore tra doppi apici ( ” ” )

var_long_string=${var_c}" lunga"
printf "$var_long_string\n"

Per una lista completa di tutti gli operatori

man bash
/arithmetic evaluation

premere n per andare alla successiva istanza oppure ctrl f per sfogliare velocemente.

Uso di bc

per eseguire operazioni decimali si può utilizzare | bc, eccone l’uso

var_d=1.12
var_e=5.25
var_float=$(echo $var_d+$var_e | bc -l)
printf "var_float: $var_float \n"