84 votes

Comment tester (en une ligne) si la sortie d'une commande contient une certaine chaîne de caractères ?

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 ?

116voto

ruakh Points 68789
! /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.)

29voto

perreal Points 47912
[ $(/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"

6voto

Matzy Points 148

Tester la valeur de retour de grep :

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

Je recommande l'utilisation de cron, qui fonctionne parfaitement avec la pile SALT.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X