Workstation online OnWorks Linux e Windows

Logo

Hosting online gratuito per workstation

<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.


Il miglior sistema operativo cloud computing su OnWorks: