Puisque vous comparez des nombres, vous pouvez utiliser une expression arithmétique , qui permet une gestion plus simple des paramètres et des comparaisons:
wget -q --tries=10 --timeout=20 --spider http://google.com
if (( $? != 0 )); then
echo "Sorry you are Offline"
exit 1
fi
Remarquez comment au lieu de -ne
, vous pouvez simplement utiliser !=
. Dans un contexte arithmétique, nous n'avons même pas besoin de préfixer $
les paramètres, c'est-à-dire
var_a=1
var_b=2
(( var_a < var_b )) && echo "a is smaller"
fonctionne parfaitement bien. Cela ne s'applique cependant pas au $?
paramètre spécial.
De plus, puisque (( ... ))
évalue les valeurs non nulles à vrai, c'est-à-dire a un état de retour de 0 pour les valeurs non nulles et un état de retour de 1 sinon, nous pourrions raccourcir à
if (( $? )); then
mais cela peut dérouter plus de personnes que ne valent les frappes enregistrées.
La (( ... ))
construction est disponible dans Bash, mais n'est pas requise par la spécification du shell POSIX (mentionnée comme une extension possible, cependant).
Tout cela étant dit, il est préférable d'éviter $?
tout à fait à mon avis, comme dans la réponse de Cole et la réponse de Steven .
if ! [[ ...
fonctionne