Cómo hacer una instrucción IF a partir del resultado de un command ejecutado

Estoy tratando de hacer una statement IF a partir de la salida de un command ejecutado. Así es como estoy tratando de hacerlo, pero no funciona. ¿Alguien sabe la manera correcta de hacer esto?

if [ "`netstat -lnp | grep ':8080'`" == *java* ]; then echo "Found a Tomcat!" fi 

Utilice la construcción condicional bash [[ conditional y prefiera la convención de sustitución del command $( <command> ) . Además, [[ evita la split de palabras de los valores variables, por lo tanto, no hay necesidad de citar el bit de sustitución de command.

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

Otra alternativa es simplemente probar el estado de salida de grep , que devolverá falso (1) si no hubo coincidencia y verdadero (0) si hubo uno, al no usar el [ command.

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

La networkingirección a / dev / null es evitar que también imprima la línea encontrada en la pantalla.

Aún más simple,

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

Si solo quieres hacer una cosa.

Puede hacer una combinación más precisa, aunque simple, con awk.

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

Para hacer coincidir más estrechamente la estructura de su command, la forma portátil de hacer coincidir comodines en una cadena en un shell es con la construcción del case .

 case "$(netstat -lnp | grep ':8080')" in *java*) echo "Found a Tomcat!";; esac