Workstation online OnWorks Linux e Windows

Logo

Hosting online gratuito per workstation

<Precedenti | Contenuti | Succ.>

Espansioni impreviste

È possibile avere errori che si verificano solo in modo intermittente in uno script. A volte lo script funzionerà correttamente e altre volte fallirà a causa dei risultati di un'espansione. Se restituiamo il punto e virgola mancante e cambiamo il valore di numero a una variabile vuota, noi


può dimostrare:



#! / Bin / bash


# problema: script per dimostrare errori comuni


numero=


if [ $numero = 1 ]; poi

echo "Il numero è uguale a 1." altro

echo "Il numero non è uguale a 1."

fi

#! / Bin / bash


# problema: script per dimostrare errori comuni


numero=


if [ $numero = 1 ]; poi

echo "Il numero è uguale a 1." altro

echo "Il numero non è uguale a 1."

fi


L'esecuzione dello script con questa modifica produce l'output:



[io@linuxbox~]$ guaio

/home/me/bin/trouble: riga 7: [: =: operatore unario previsto Il numero non è uguale a 1.

[io@linuxbox~]$ guaio

/home/me/bin/trouble: riga 7: [: =: operatore unario previsto Il numero non è uguale a 1.


Otteniamo questo messaggio di errore piuttosto criptico, seguito dall'output del secondo eco comando. Il problema è l'espansione del numero variabile all'interno del test comando. Quando il comando:



[ $numero = 1 ]

[ $numero = 1 ]


subisce espansione con numero essendo vuoto, il risultato è questo:


[=1]

[=1]


che non è valido e viene generato l'errore. Il = operatore è un operatore binario (richiede un valore su ciascun lato), ma manca il primo valore, quindi test comando si aspetta un operatore unario (come -z) Invece. Inoltre, poiché test fallito (a causa dell'errore), il if comando riceve un codice di uscita diverso da zero e agisce di conseguenza, e il secondo eco comando viene eseguito.

Questo problema può essere corretto aggiungendo virgolette attorno al primo argomento nel test

comando:


[ "$numero" = 1 ]

[ "$numero" = 1 ]


Quindi quando si verifica l'espansione, il risultato sarà questo:



[ "" = 1 ]

[ "" = 1 ]


che fornisce il numero corretto di argomenti. Oltre alle stringhe vuote, le virgolette dovrebbero essere utilizzate nei casi in cui un valore potrebbe espandersi in stringhe di più parole, come con i nomi di file contenenti spazi incorporati.


Il miglior sistema operativo cloud computing su OnWorks: