Dal momento che stai confrontando i numeri, è possibile utilizzare un arithmetic expression, che consente più semplice la gestione dei parametri e confronto:
wget -q --tries=10 --timeout=20 --spider http://google.com
if (($? != 0)); then
echo "Sorry you are Offline"
exit 1
fi
Si noti come, invece di -ne
, si può semplicemente utilizzare !=
. In un contesto aritmetica, non hanno nemmeno bisogno di anteporre $
ai parametri, vale a dire,
var_a=1
var_b=2
((var_a < var_b)) && echo "a is smaller"
opere perfettamente bene. Questo non si applica al parametro speciale $?
, tuttavia.
Inoltre, poiché ((...))
valuta valori diversi da zero a vero, cioè, ha una stato di ritorno di 0 per valori diversi da zero e uno stato restituito di 1 altrimenti, potremmo accorciare a
if (($?)); then
ma questo potrebbe confondere più persone di quante ne valgano i tasti salvati.
Il costrutto ((...))
è disponibile in Bash, ma non richiesto dallo POSIX shell specification (come possibile estensione, tuttavia).
Detto questo, è meglio evitare $?
del tutto a mio avviso, come in Cole's answer e Steven's answer.
fonte
2016-06-04 21:29:05
Dove l'hai messo? 'se! [[... 'funziona –
puoi anche usarlo in questo modo: wget your_xxxx_params || (echo "oh oh" && exit 1) –
> chiamare una subshell solo per emettere un errore – tijagi