Costrutti condizionali

All'interno di uno script, è spesso utile poter controllare delle condizioni, per decidere che azione intraprendere. Questo permette di ottenere un comportamento equivalente allo statement if presente nella maggior parte dei linguaggi di programmazione.

L'ingrediente base per questi controlli è il programma test, che può essere un software effettivamente installato, oppure una funzionalità offerta dalla bash.

Tramite test è possibile controllare varie condizioni. Supponiamo ad esempio di voler leggere un file di nome file.txt, ma di voler controllare che sia leggibile prima di procedere con la lettura. Allora, potremmo controllare la condizione con il comando

$ test -r file.txt
Questo comando non stampa nulla, ma il suo return code viene settato a zero (sinonimo di "successo") solo nel caso in cui il file sia leggibile.
Provare a controllare che valore ritorna il programma test per un file che è effettivamente leggibile, ed uno che non esiste.

L'istruzione if

Tramite il comando test, combinato con l'istruzione if, possiamo realizzare il controllo che ci eravamo proposti di implementare:

#!/bin/bash
# Leggo il file file.txt, ma solo se esiste ed è leggibile
if test -r file.txt; then
 cat file.txt
fi
Per terminare il comando if, si usa il comando scritto al contrario, ovvero fi.

Dato che il comando test si usa molto spesso, all'interno della bash è possibile abbreviarlo con la sintassi:

[ -r file.txt ]
che è completamente equivalente alla scrittura precedente. Avremmo quindi potuto riscrivere il comando if come segue:
#!/bin/bash
# Leggo il file file.txt, ma solo se esiste ed è leggibile
if [ -r file.txt ]; then
 cat file.txt
fi

Esistono molti altri confronti che è possibile eseguire con test. Ad esempio, scrivendo test A -eq B possiamo controllare se l'intero A è uguale a B. Per vedere tutti i controlli che è possibile effettuare, controllare il manuale.