If et grep en bash -- Rechercher une chaine et if statement

Fermé
anselme - 16 juil. 2013 à 10:48
Flachy Joe Messages postés 2103 Date d'inscription jeudi 16 septembre 2004 Statut Membre Dernière intervention 21 novembre 2023 - 16 juil. 2013 à 20:25
Bonjour,

J'essaye de faire un petit script bash qui effectue une action s' il trouve une chaine dans fichier mais impossible de le faire marcher.
je ne comprends pas pourquoi..
A chaque fois il me renvoie l'action "Pas bon" ; alors que j'ai bien la chaine dans un de mes fichiers.
J'ai l'impression que le grep ne renvoie pas 0 à la sortie..
Peut-être pouvez-vous m'aider .

#!/bin/bash
find /home/ -type f | xargs grep -q 'chaineatrouver'
if [ $? == 0 ] #if the result is not equal to zero
then
echo "Action"

else
echo "Pas d'action"
exit 1
fi

exit 0

Merci d'avance






1 réponse

Flachy Joe Messages postés 2103 Date d'inscription jeudi 16 septembre 2004 Statut Membre Dernière intervention 21 novembre 2023 260
16 juil. 2013 à 19:11
Salut,
voila une solution :
#!/bin/bash
if [ -n "$(find /home/ -type f -exec grep "chaine" {} \; -quit )" ]
then
echo "Action"

else
echo "Pas d'action"
exit 1
fi

exit 0 

0
salut,

if find /home/ -type f -exec grep -q "chaine" {} \; -quit {} \;
then
mais ce n'est pas très précis, car dès qu'un fichier comporte une correspondance find s'arrête.
En plus, tu ne sais pas quel(s) fichier(s) contient la chaîne recherchée.
:(
0
Flachy Joe Messages postés 2103 Date d'inscription jeudi 16 septembre 2004 Statut Membre Dernière intervention 21 novembre 2023 260
16 juil. 2013 à 19:35
C'est le comportement du script de départ, man grep :
-q, --quiet, --silent
              Ne pas afficher les  résultats  normaux.  Sortir  immédiatement
              avec  un  code  de retour égal à zéro dès qu'une correspondance
              est trouvée, même si  une  erreur  est  détectée.  Voyez  aussi
              l'option -s ou --no-messages. (-q est spécifiée dans POSIX)
0