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

anselme -  
Flachy Joe Messages postés 2303 Statut Membre -
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. Flachy Joe Messages postés 2303 Statut Membre 261
     
    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. Utilisateur anonyme
       
      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. Flachy Joe Messages postés 2303 Statut Membre 261
       
      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. Utilisateur anonyme
       
      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. Flachy Joe Messages postés 2303 Statut Membre 261
       
      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. Utilisateur anonyme
       
      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