2012-09-11 12 views

risposta

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

(grep restituisce un exit-status di 0 se si trova una corrispondenza, e 1 altrimenti l'opzione -q, "tranquilla", dice di non stampare qualsiasi partita che trova;. In altre parole, si dice . grep che l'unica cosa che vuoi è il suo ritorno-value la ! all'inizio inverte l'uscita-stato dell'intero gasdotto)

a cura di aggiungere:. in alternativa, se si vuole fare questo in "puro Bash "(anziché chiamare grep), è possibile scrivere:

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

([[...]] è spiegato in §3.2.4.2 "Conditional Constructs" of the Bash Reference Manual. *5.5* è proprio come in fileglobs:. Zero o più caratteri, più 5.5, più zero o più caratteri)

+0

salvato la pancetta! – mhenrixon

+0

Un genio effing! La potenza del tubo è continuamente impressionante. –

+0

C'è qualche cosa da echeggiare il valore di/usr/local/bin/monit --version' quando fallisce pure? –

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

es-1: verificare il successo

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

es-2: controllare fallimento

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

o, per verificare solo se l'output contiene 5.5:

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

"5.5" farà parte di una maggiore quantità di output. –

+0

aggiornato la risposta – perreal

+0

@perreal - Non è possibile citare regex in bash, lo rende una stringa letterale piuttosto che una regex. (citando funziona in alcune versioni precedenti di bash, ma è stato corretto come bug). – jordanm

0

prova il valore di ritorno di grep:

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

Suggerirei cron, funziona benissimo con una pila SALE

Problemi correlati