2012-09-11 25 views

Respuesta

80
! /usr/local/bin/monit --version | grep -q 5.5 

(grep devuelve una salida estatus de 0 si se encuentra una coincidencia, y 1 en caso contrario La opción -q, "tranquilo", dice que no a imprimir cualquier partido que encuentra;. En otras palabras, se dice . grep que lo único que quiere es su retorno valor la ! al principio invierte la salida-estado de toda la tubería)

Editado para añadir:. Alternativamente, si usted quiere hacer esto en "pura Bash "(en lugar de llamar al grep), puede escribir:

[[ $(/usr/local/bin/monit --version) != *5.5* ]] 

([[...]] se explica en §3.2.4.2 "Conditional Constructs" of the Bash Reference Manual. *5.5* es igual que en fileglobs:. Cero o más caracteres, además de 5.5, además de cero o más caracteres)

+0

salvado el pellejo! – mhenrixon

+0

Effing genius! El poder de la tubería es continuamente impresionante. –

+0

¿Hay algún eco para el valor de '/ usr/local/bin/monit --version' cuando falla también? –

20
[ $(/usr/local/bin/monit --version) == "5.5" ] 

EG-1: comprobar para el éxito

[ $(/usr/local/bin/monit --version) == "5.5" ] && echo "OK" 

EG-2: comprobar para el fracaso

[ $(/usr/local/bin/monit --version) == "5.5" ] || echo "NOT OK" 

o, simplemente comprobar si la salida contiene 5.5:

[[ $(/usr/local/bin/monit --version) =~ "5.5" ]] || echo "NOT OK" 
+0

"5.5" será parte de una salida de mayor cantidad. –

+0

actualizó la respuesta – perreal

+0

@perreal - No puede citar regex en bash, lo convierte en una cadena literal en lugar de una expresión regular. (La cita funciona en algunas versiones anteriores de bash, pero se corrigió como un error). – jordanm

0

prueba el valor de retorno de grep:

sudo service xyz status | grep 'not' &> /dev/null 
if [ $? == 0 ]; then 
    echo "whateveryouwant" 
fi 

recomendaría cron, funciona bien con la pila SAL

Cuestiones relacionadas