linux - resueltos - scripts bash ejemplos
Negar si condiciĆ³n en script bash (5)
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
, puede simplemente usar !=
. En un contexto aritmético, ni siquiera tenemos que anteponer $
a los parámetros, es decir,
var_a=1
var_b=2
(( var_a < var_b )) && echo "a is smaller"
funciona perfectamente bien Esto no aplica a $?
parámetro especial, sin embargo.
Además, dado que (( ... ))
evalúa 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 acortar a
if (( $? )); then
pero esto podría confundir a más personas de lo que valen las teclas guardadas.
La construcción (( ... ))
está disponible en Bash, pero no es requerida por la especificación de shell POSIX (mencionada como posible extensión, sin embargo).
Dicho todo esto, es mejor evitar $?
en conjunto, en mi opinión, como en la respuesta de Cole y la respuesta de Steven .
Soy nuevo en bash y estoy atascado al intentar negar el siguiente comando:
wget -q --tries=10 --timeout=20 --spider http://google.com
if [[ $? -eq 0 ]]; then
echo "Sorry you are Offline"
exit 1
Esta condición if devuelve true si estoy conectado a internet. ¡Quiero que suceda al revés pero poniéndolo !
en cualquier lugar no parece funcionar.
Mejor
if ! wget -q --spider --tries=10 --timeout=20 google.com
then
echo ''Sorry you are Offline''
exit 1
fi
Puede usar una comparación desigual -ne
lugar de -eq
:
wget -q --tries=10 --timeout=20 --spider http://google.com
if [[ $? -ne 0 ]]; then
echo "Sorry you are Offline"
exit 1
Si te sientes flojo, este es un método breve para manejar las condiciones con ||
(o) y &&
(y) después de la operación:
wget -q --tries=10 --timeout=20 --spider http://google.com || /
{ echo "Sorry you are Offline" && exit 1; }
Tu puedes elegir:
if [[ $? -ne 0 ]]; then # -ne: not equal
if ! [[ $? -eq 0 ]]; then # -eq: equal
if [[ ! $? -eq 0 ]]; then
!
invierte el retorno de la siguiente expresión, respectivamente.