Sou iniciante no bash e estou tentando tentar negar o seguinte comando:
wget -q --tries=10 --timeout=20 --spider http://google.com
if [[ $? -eq 0 ]]; then
echo "Sorry you are Offline"
exit 1
Esta condição se retorna verdadeira se eu estiver conectado à Internet. Eu quero que isso aconteça ao contrário, mas colocar em !
qualquer lugar não parece funcionar.
linux
bash
if-statement
negate
Sudh33ra
fonte
fonte
if ! [[ ...
funcionaRespostas:
Você pode escolher:
!
inverte o retorno da seguinte expressão, respectivamente.fonte
test
comando:if test $? -ne 0; then
if
espera uma declaração que seja 0 ou 1, para que você possa usar o próprio comando e invertê-lo:if ! wget ...; then ...; fi
Melhor
fonte
!
comando a seguir e, caso contrário, você estará fazendo uma expansão do histórico. unix.stackexchange.com/questions/3747/…Se você estiver com preguiça, aqui está um método conciso de lidar com as condições usando
||
(ou) e&&
(e) após a operação:fonte
&&
comando after echo para a;
. A razão para isso é que, se a saída estiver sendo redirecionada para um arquivo em um disco completo, aecho
falha retornará eexit
nunca será acionada. Este provavelmente não é o comportamento que você deseja.set -e
e nãoecho
vai sair do script de qualquer maneiraComo você está comparando números, pode usar uma expressão aritmética , que permite um tratamento mais simples dos parâmetros e comparação:
Observe como, em vez de
-ne
, você pode apenas usar!=
. Em um contexto aritmético, nem precisamos preceder$
aos parâmetros, ou seja,funciona perfeitamente bem. Isso não se aplica ao
$?
parâmetro especial, no entanto.Além disso, como
(( ... ))
avalia valores diferentes de zero como true, ou seja, possui um status de retorno 0 para valores diferentes de zero e um status de retorno 1, caso contrário, poderíamos reduzir paramas isso pode confundir mais pessoas do que valem as teclas salvas.
A
(( ... ))
construção está disponível no Bash, mas não é exigida pela especificação do shell POSIX (mencionada como possível extensão).Isso tudo foi dito, é melhor evitar
$?
por completo na minha opinião, como na resposta de Cole e resposta de Steven .fonte
(( ... ))
? Referência dos programadores POSIX - Comandos compostos:)
Você pode usar comparação desigual em
-ne
vez de-eq
:fonte