Respuestas:
Utilice la [[
construcción condicional bash y prefiera la convención de sustitución de comando $(
<comando> )
. Además, [[
evita la división de palabras de valores variables, por lo tanto, no es necesario citar el bit de sustitución de comando.
if [[ $(netstat -lnp | grep ':8080') = *java* ]]; then
echo "Found a Tomcat!"
fi
Otra alternativa es simplemente probar el estado de salida de grep
sí mismo, que devolverá falso (1) si no hubo coincidencia y verdadero (0) si hubo uno, al no usar el [
comando.
if netstat -lntp | grep ':8080.*java' > /dev/null; then
echo "Found a Tomcat!"
fi
La redirección a / dev / null es para evitar que también imprima la línea encontrada en la pantalla.
Puedes hacerlo más preciso, pero simple, haciendo coincidir con awk.
if netstat -lnp | awk '$4 ~ /:8080$/ && $7 ~ /java/ {exit(0)} END {exit(1)}'; then …
Para hacer coincidir la estructura de su comando más de cerca, la forma portátil de hacer coincidir comodines en una cadena en un shell es con la case
construcción.
case "$(netstat -lnp | grep ':8080')" in
*java*) echo "Found a Tomcat!";;
esac
Otro ejemplo del 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
hacer? ¿Es esa una función personalizada o un alias en su sistema?
usr/bin/HEAD → lwp-request
. Y lwp-request parece ser este . No estoy seguro, cómo llegué a él (no de forma manual con seguridad), si todo está allí por defecto. Parece que hay una minúscula usr/bin/head
así .
-q
opción de grep en lugar de redirigir a / dev / null. Con-q
, grep no genera nada y deja de buscar después de la primera coincidencia.