scripts script resueltos paso pasar parametros manejo hacer ejercicios ejemplos como comando cadenas linux bash if-statement negate

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.