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"