Soy nuevo en bash y estoy atascado al tratar de 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
Esto si la condición devuelve verdadero si estoy conectado a internet. Quiero que suceda al revés, pero poner en !
cualquier lugar no parece funcionar.
linux
bash
if-statement
negate
Sudh33ra
fuente
fuente
if ! [[ ...
funcionaRespuestas:
Tu puedes elegir:
!
invierte el retorno de la siguiente expresión, respectivamente.fuente
test
comando:if test $? -ne 0; then
if
espera una declaración que sea 0 o 1, por lo que puede usar el comando en sí mismo e invertirlo:if ! wget ...; then ...; fi
Mejor
fuente
!
siguiente comando y, de lo contrario, realizará una expansión del historial. unix.stackexchange.com/questions/3747/…Si se siente flojo, aquí hay un método conciso para manejar las condiciones usando
||
(o) y&&
(y) después de la operación:fuente
&&
comando after the echo a a;
. La razón de esto es que si la salida se redirige a un archivo en un disco lleno,echo
devolverá el error yexit
nunca se disparará. Probablemente este no sea el comportamiento que desea.set -e
y fallarecho
saldrá del script de todos modosComo 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:
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,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 apero 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 .fuente
(( ... ))
? Referencia de programadores POSIX - Comandos compuestos:)
Puede usar una comparación desigual en
-ne
lugar de-eq
:fuente