<Precedenti | Contenuti | Succ.>
Una versione più moderna del test
Versioni recenti di bash includere un comando composto che funge da sostituto avanzato per test. Utilizza la seguente sintassi:
[[ espressione ]]
dove, come test, espressione è un'espressione che restituisce un risultato vero o falso. Il [[]] il comando è molto simile a test (supporta tutte le sue espressioni), ma
aggiunge una nuova importante espressione stringa:
string1 =~ regex
che restituisce vero se string1 corrisponde all'espressione regolare estesa regex. Questo apre molte possibilità per eseguire attività come la convalida dei dati. Nel nostro precedente esempio delle espressioni intere, lo script fallirebbe se la costante INT conteneva qualsiasi cosa tranne un numero intero. Lo script ha bisogno di un modo per verificare che la costante contenga un numero intero. Usando [[]] con la =~ operatore di espressione stringa, potremmo migliorare lo script in questo modo:
#! / Bin / bash
# test-integer2: valuta il valore di un intero.
INT=-5
if [[ "$INT" =~ ^-?[0-9]+$ ]]; poi
if [ $INT -eq 0 ]; poi echo "INT è zero."
altro
if [ $INT -lt 0 ]; poi echo "INT è negativo."
altro
echo "INT è positivo."
fi
if [ $((INT % 2)) -eq 0 ]; poi echo "INT è pari."
altro
echo "INT è dispari."
fi
fi
altro
echo "INT non è un numero intero." >&2 uscita 1
fi
#! / Bin / bash
# test-integer2: valuta il valore di un intero.
INT=-5
if [[ "$INT" =~ ^-?[0-9]+$ ]]; poi
if [ $INT -eq 0 ]; poi echo "INT è zero."
altro
if [ $INT -lt 0 ]; poi echo "INT è negativo."
altro
echo "INT è positivo."
fi
if [ $((INT % 2)) -eq 0 ]; poi echo "INT è pari."
altro
echo "INT è dispari."
fi
fi
altro
echo "INT non è un numero intero." >&2 uscita 1
fi
Applicando l'espressione regolare, siamo in grado di limitare il valore di INT solo alle stringhe che iniziano con un segno meno facoltativo, seguito da uno o più numeri. Questa espressione elimina anche la possibilità di valori vuoti.
Un'altra caratteristica aggiunta di [[]] è che l' == L'operatore supporta il pattern matching allo stesso modo dell'espansione del percorso. Per esempio:
[io@linuxbox~]$ FILE=pippo.bar
[io@linuxbox~]$ FILE=pippo.bar
Una versione più moderna del test
[io@linuxbox~]$ if [[ $FILE == pippo.* ]]; poi
> echo "$FILE corrisponde al modello 'pippo.*'"
> fi
foo.bar corrisponde al modello 'foo.*'
[io@linuxbox~]$ if [[ $FILE == pippo.* ]]; poi
> echo "$FILE corrisponde al modello 'pippo.*'"
> fi
foo.bar corrisponde al modello 'foo.*'
Questo rende [[]] utile per valutare file e percorsi.