Dans une ligne de bash, comment puis-je renvoyer un statut de sortie de 0 lorsque la sortie de /usr/local/bin/monit --version
ne contient pas exactement 5.5
et un statut de sortie de 1 lorsqu'il le fait ?
Réponses
Trop de publicités?! /usr/local/bin/monit --version | grep -q 5.5
( grep
renvoie un état de sortie de 0 s'il trouve une correspondance, et de 1 sinon. L'état de sortie -q
l'option "quiet", lui demande de ne pas imprimer les résultats qu'il trouve ; en d'autres termes, il demande à grep
que la seule chose que vous voulez, c'est sa valeur de retour. Les !
au début inverse l'état de sortie de l'ensemble du pipeline).
Modification de l'article : Sinon, si vous voulez faire cela en "pur Bash" (plutôt que d'appeler grep
), vous pouvez écrire :
[[ $(/usr/local/bin/monit --version) != *5.5* ]]
( [[...]]
est expliquée dans §3.2.4.2 "Constructions conditionnelles" de la norme Manuel de référence Bash . *5.5*
est identique à celui des fileglobs : zéro ou plusieurs caractères, plus 5.5
plus zéro ou plusieurs caractères.)
[ $(/usr/local/bin/monit --version) == "5.5" ]
eg-1 : vérification de la réussite
[ $(/usr/local/bin/monit --version) == "5.5" ] && echo "OK"
eg-2 : vérifier l'absence de défaillance
[ $(/usr/local/bin/monit --version) == "5.5" ] || echo "NOT OK"
ou, pour vérifier simplement si la sortie contient 5.5
:
[[ $(/usr/local/bin/monit --version) =~ "5.5" ]] || echo "NOT OK"