146 votes

Comment utiliser une comparaison de fichiers grep dans une instruction bash if / else?

Lorsque notre serveur est en place, nous avons besoin de vérifier un fichier pour voir comment le serveur est configuré.

Nous voulons rechercher la chaîne suivante à l’intérieur de notre fichier /etc/aws/hosts.conf :

Ensuite, nous voulons vérifier si cette chaîne existe et utiliser un if/else instruction à exécuter l’une des deux options en fonction de si la chaîne existe ou pas.

Quelle est la syntaxe BASH pour l’if déclaration ?

36voto

prend une commande et vérifie sa valeur de retour.est juste une commande.

25voto

vladr Points 34562

Notez que, pour PIPE étant toute commande ou une séquence de commandes, puis:

if PIPE ; then
  # do one thing if PIPE returned with zero status ($?=0)
else 
  # do another thing if PIPE returned with non-zero status ($?!=0), e.g. error
fi 

Pour l'enregistrement, [ expr ] est une commande interne du shell raccourci pour test expr.

Depuis grep revient avec l'état 0 dans le cas d'une correspondance, et de l'état différent de zéro en cas de non-correspondances, vous pouvez utiliser:

if grep -lq '^MYSQL_ROLE=master' ; then 
  # do one thing 
else 
  # do another thing
fi 

Notez l'utilisation de l' -l qui se soucie uniquement de l'un fichier ayant au moins un match (de sorte que l' grep retourne dès qu'il trouve une correspondance, sans inutilement en continuant à analyser le fichier d'entrée.)

sur certaines plateformes [ expr ] n'est pas un builtin, mais une réelle exécutable /bin/[ (dont le dernier argument sera ]), c'est pourquoi [ expr ] devrait contenir d'espaces autour de la place des crochets, et pourquoi il doit être suivi par l'un de la liste des commandes séparateurs (;, &&, ||, |, &, retour à la ligne)

4voto

ghostdog74 Points 86060

Il suffit d’utiliser bash

2voto

bta Points 22525

Essayer:

 if [ -n "`grep \"MYSQL_ROLE=master\" /etc/aws/hosts.conf`" ]; then
 

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