Respostas:
Use a [[
construção condicional do bash e prefira a convenção de substituição de comando $(
<comando> )
. Além disso, [[
evita a divisão de palavras de valores variáveis, portanto, não há necessidade de citar o bit de substituição de comando.
if [[ $(netstat -lnp | grep ':8080') = *java* ]]; then
echo "Found a Tomcat!"
fi
Outra alternativa é simplesmente testar o status de saída grep
, que retornará false (1) se não houver correspondência e true (0) se houver, não utilizando o [
comando
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.
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 do seu comando mais de perto, a maneira portátil de fazer a correspondência curinga em uma sequência de caracteres em um shell é com a case
construção.
case "$(netstat -lnp | grep ':8080')" in
*java*) echo "Found a Tomcat!";;
esac
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
HEAD
faz? Isso é uma função personalizada ou um alias no seu sistema?
usr/bin/HEAD → lwp-request
. E lwp-request parece ser este . Não tenho certeza, como cheguei a ele (não manualmente, com certeza), ou se está tudo lá por padrão. Parece haver uma minúscula usr/bin/head
também .
-q
opção grep em vez de redirecionar para / dev / null. Com-q
, grep não gera nada e para de procurar após a primeira correspondência.