Como está comparando números, puede usar una expresión aritmética , que permite un manejo más simple de los parámetros y la comparación:
wget -q --tries=10 --timeout=20 --spider http://google.com
if (( $? != 0 )); then
echo "Sorry you are Offline"
exit 1
fi
Observe cómo en lugar de -ne
, simplemente puede usar !=
. En un contexto aritmético, ni siquiera tenemos que anteponer los $
parámetros, es decir,
var_a=1
var_b=2
(( var_a < var_b )) && echo "a is smaller"
Funciona perfectamente bien. Sin embargo, esto no se aplica al $?
parámetro especial.
Además, dado que (( ... ))
evalúa los valores distintos de cero a verdadero, es decir, tiene un estado de retorno de 0 para valores distintos de cero y un estado de retorno de 1 de lo contrario, podríamos acortarlo a
if (( $? )); then
pero esto podría confundir a más personas de lo que valen las pulsaciones de teclas guardadas.
La (( ... ))
construcción está disponible en Bash, pero no es requerida por la especificación de shell POSIX (aunque mencionada como posible extensión).
Todo esto se dice, es mejor evitar $?
por completo en mi opinión, al igual que en la respuesta de Cole y la respuesta de Steven .
if ! [[ ...
funciona