Como fazer uma declaração if a partir do resultado de um comando executado

36

Estou tentando fazer uma instrução IF a partir da saída de um comando executado. Aqui está como eu estou tentando fazer isso, mas não funciona. Alguém sabe o caminho certo para fazer isso?

if [ "'netstat -lnp | grep ':8080''" == *java* ]; then
  echo "Found a Tomcat!"
fi
    
por djangofan 24.10.2012 / 18:48

5 respostas

49

Use a construção condicional bash [[ e prefira a convenção de substituição do comando $( < command &% { ) }. Além disso, [[ impede a divisão de palavras de valores de variáveis, portanto, não há necessidade de citar o bit de substituição de comandos.

if [[ $(netstat -lnp | grep ':8080') = *java* ]]; then
  echo "Found a Tomcat!"
fi
    
por 24.10.2012 / 18:55
26

Outra alternativa é simplesmente testar o status de saída de grep , que retornará false (1) se não houver correspondência e true (0) se houver, não usando o comando [ . / p>

if netstat -lntp | grep ':8080.*java' > /dev/null; then
    echo "Found a Tomcat!"
fi

O redirecionamento para / dev / null é para impedir que ele também imprima a linha encontrada na tela.

    
por 24.10.2012 / 20:20
4

Você pode fazer uma correspondência mais precisa, porém simples, com o awk.

if netstat -lnp | awk '$4 ~ /:8080$/ && $7 ~ /java/ {exit(0)} END {exit(1)}'; then …

Para combinar a estrutura de seu comando mais de perto, a maneira portátil de fazer correspondência de caractere curinga em uma string em um shell é com a construção case .

case "$(netstat -lnp | grep ':8080')" in
  *java*)  echo "Found a Tomcat!";;
esac
    
por 25.10.2012 / 02:05
4

Ainda mais simples,

netstat -lntp | grep ':8080.*java' > /dev/null && command

Se você quer apenas fazer uma coisa.

    
por 25.10.2012 / 04:21
0

Outro exemplo do mundo real:)

if [[ $(HEAD mycompany-intranet.com | grep '200\ OK' | wc -l) = "1" ]];  then
    echo doing some intranet settings (proxy, etc)
else
    echo doing some work-at-home settings (proxy, etc)
fi
    
por 22.08.2018 / 10:49