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

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

  1. 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
    1. 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
    2. 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
    3. C'est le comportement du script de départ
      Ceci ne justifie rien.
      Au départ il y a des faiblesses.
      Quand on les voit, on peut/doit les signaler.
      0
    4. Certes mais je pense que c'est voulu, cette option -q il a fallu aller la chercher. Si le nombre ou le nom du fichier avait importé c'est sans doute pas cette commande qui aurait été utilisée.
      Enfin, vu les connaissance qu'on a sur l'utilité du script on peut tout imaginer, donc c'est vrai qu'on peu donner le plus d'info possible.
      0
    5. je ne discute pas le -q de grep, mais le -quit de find
      et d'une manière générale, l'algo du script.
      0