Come in ogni linguaggio di programmazione, anche in Bash è possibile verificare il valore contenuto nelle variabili dichiarate, mediante il comando test
: esso che ritorna 0
(vero) o 1
(falso), a seconda della valutazione dell'espressione assegnata. Si possono anche usare le parentesi quadre in sostituzione di test
: test expr
e [ expr ]
sono quindi equivalenti. Il risultato della valutazione viene memorizzato nella variabile built-in $?
, e lo si può usare con gli operatori booleani &&
e ||
.
Vediamo un semplice esempio:
#!/bin/bash
i="abc"
j="def"
[ $j != $i ]
echo $?
Questo script utilizza l'operatore !=
per verificare se il valore contenuto in $j
sia diverso da quello contenuto in $i
. Si possono confrontare valori aritmetici usando gli operatori -eq
(uguale), -ne
(diverso), -lt
(minore di), -le
(minore di o uguale a), -gt
(maggiore di), -ge
(maggiore di o uguale a). È possibile anche confrontare stringhe, verificandone l'uguaglianza o la precedenza di una rispetto all'altra, utilizzando gli operatori =
, !=
, <
, >
(poiché questi ultimi due vengono usati da Bash anche per la redirezione dell'output, è necessario che siano preceduti da \
). L'operatore unario -z
valuta se la stringa sia nulla, mentre -n
o l'omissione di qualunque operatore risulta vero se la stringa non è vuota. Esistono inoltre operatori per test su file, come gli operatori unari -d
e -e
che valutano rispettivamente l'esistenza del file, e se esso sia una directory, o l'operatore binario -nt
, che valuta se il primo file è stato modificato più recentemente del secondo. È utile controllare il manuale (digitando man test
) per ottenere la lista di tutte le opzioni di test disponibili.
Infine, è possibile comporre condizioni più complicate tramite gli operatori della logica booleana che abbiamo introdotto nella sezione precedente: l'operatore -a
corrisponde all'and logico, -o
all'or mentre il !
alla negazione; per imporre la precedenza di un operatore rispetto ad un altro si possono utilizzare le parentesi, che essendo riservate tipicamente all'esecuzione di espressioni in sotto-shell, devono essere in questo caso precedute da \
.
Il comando test è implementato su tutte le shell che seguono lo standard POSIX, perciò è utilizzabile su quasi tutte quelle disponibili; Bash, Zsh e la Korn shell implementano anche un nuovo comando test, identificato da doppie parentesi quadre [[
, che fornisce una sintassi più semplice e intuitiva degli operatori appena descritti. Utilizzando la nuova sintassi, non è necessario anteporre il simbolo \
alle parentesi, racchiudere fra "
le variabili contenenti nomi di file, ed è possibile utilizzare la stessa notazione delle operazioni aritmetiche per i tre operatori di logica booleana &&
, ||
e !
. Per ulteriori dettagli sulle specifiche della nuova sintassi, suggeriamo di controllare la pagina di manuale di Bash (digitando man bash
).