Costrutti condizionale if/then if/then/elif
Il costrutto if/then verifica che l'exit status di una condizione sia 0 (in Unix 0 significa successo per convenzione), e se questa ha esito positivo vengono eseguiti uno o più comandi.
Come altri linguaggi di programmazione, anche gli script bash, hanno la possibilità di avere costrutti if/then annidati.
Esempio di if/then:
if [ condizione-vera ]
then
comando 1
comando 2
...
else
comando 3
comando 4
...
fi
Esempio if/then/elif:
if [ condizione1 ]
then
comando1
comando2
comando3
elif [ condizione2 ] # Uguale a else if
then
comando4
comando5
else
comando-predefinito
fi
Esempio di if/then annidato:
if [ condizione1 ]
then
if [ condizione2 ]
then
fa-qualcosa # Ma solo se sia "condizione1" che "condizione2" sono vere.
fi
fi
NB: nelle condizioni vanno inseriti gli spazi!
Operatori di verifica sui file sono:
-e: il file esiste
-f: il file è un file regolare (non una directory o un file di dispositivo)
-s: il file ha dimensione superiore a zero
-d: il file è una directory
-b: il file è un dispositivo a blocchi (floppy, cdrom, ecc.)
-c: il file è un dispositivo a caratteri (tastiera, modem, scheda audio, ecc.)
-p: il file è una pipe
-h o
-L: il file è un link simbolico
-r: il file ha il permesso di lettura (per l'utente che esegue la verifica)
-w: il file ha il permesso di scrittura (per l'utente che esegue la verifica)
-x: il file ha il permesso di esecuzione (per l'utente che esegue la verifica)
f1 -nt f2: il file f1 è più recente del file f2
f1 -ot f2: il file f1 è meno recente del file f2
f1 -ef f2: i file f1 e f2 sono hard link allo stesso file
!: "not", inverte il risultato delle precedenti opzioni di verifica (restituisce vero se la condizione è assente).
Confronti tra interi:
-eq: è uguale a --> Esempio:
-ne: è diverso (non uguale) da --> Esempio:
-gt: è maggiore di --> Esempio:
-ge: è maggiore di o uguale a --> Esempio:
-lt: è minore di --> Esempio:
-le: è minore di o uguale a --> Esempio:
<: è minore di (tra doppie parentesi) --> Esempio:
<=: è minore di o uguale a (tra doppie parentesi) --> Esempio:
>: è maggiore di (tra doppie parentesi) --> Esempio:
>=: è maggiore di o uguale a (tra doppie parentesi) --> Esempio:
Confronto di stringhe:
=: è uguale a --> Esempio:
==: è uguale a --> Esempio:
NdR: "=" o "==" sono, in questo caso, sinonimi.
!=: è diverso (non uguale) da --> Esempio:
NB:All'interno del costrutto [[ ... ]] questo operatore esegue la ricerca di corrispondenza.
<: è inferiore a, in ordine alfabetico ASCII --> Esempio:
NB: Si noti che "<" necessita dell'escaping nel costrutto [ ].
>: è maggiore di, in ordine alfabetico ASCII --> Esempio:
NB: Si noti che ">" necessita dell'escaping nel costrutto [ ].
-z: la stringa è "nulla", cioè, ha lunghezza zero
-n: la stringa non è "nulla".
NB: L'operatore -n richiede assolutamente il quoting della stringa all'interno delle parentesi quadre. Per l'operatore -z potrebbe funzionare, ma è meglio usare anche questo caso il quoting. --> Esempi:
Confronti composti:
&& o
-a: fa l'AND logico tra le due espressioni.
|| o
-o: fa l'OR logico tra le due espressioni.