Contenu | Rechercher | Menus

Annonce

Si vous rencontrez des soucis à rester connecté sur le forum (ou si vous avez perdu votre mot de passe) déconnectez-vous et reconnectez-vous depuis cette page, en cochant la case "Me connecter automatiquement lors de mes prochaines visites".
Test de l'ISO d'Ubuntu francophone : nous avons besoin de testeurs pour la version francophone d'Ubuntu 14.04. Liens et informations ici.

#1 Le 07/11/2012, à 16:57

hydro_90

test bash, afficher un fichier s'il contient un motif

Bonjour,

Je souhaite faire un script pour vérifier si ERREUR est présent dans deux fichiers.
Si c'est le cas il affiche le contenu du fichier ou des deux fichiers:
En gros si ERREUR est présent dans fichier1.txt il affiche le contenu de fichier1.txt, si ERREUR est présent dans fichier2.txt il affiche le contenu de fichier2.txt, si fichier1.txt et fichier2.txt contiennent ERREUR le contenu des deux fichiers sont affichés.

J'ai fait un truc comme ça mais ça marche pas bien, quelqu'un à une idée?

#!/bin/bash
VAR1=$(grep 'ERREUR' fichier1.txt)
VAR2=$(grep 'ERREUR' fichier2.txt)
if [ -n "$VAR1" ] ; then
cat fichier1.txt ;
else
if [ -n "$VAR2" ] ; then
cat fichier2.txt
else
exit 0
fi
fi

Merci par avance

edit modo : titre

Dernière modification par nesthib (Le 09/11/2012, à 19:05)

Hors ligne

#2 Le 07/11/2012, à 17:18

Postmortem

Re : test bash, afficher un fichier s'il contient un motif

Salut,

for fic in fichier1.txt fichier2.txt
do
   if grep -q "ERREUR" "$fic"
   then
      cat "$fic"
   fi
done

Trusty Tahr (64 bits), Athlon64 3800+, ATI Radeon HD4870

Mot' a dit : « Un Hellfest sans Slayer, c'est comme une galette-saucisse sans saucisse ! »

Hors ligne

#3 Le 07/11/2012, à 17:24

louis94

Re : test bash, afficher un fichier s'il contient un motif

Bonjour,

Ta syntaxe et ta manière d'écrire les if sont corrects, ce qui ne va pas, c'est la structure. La voici en pseudo-code :

si ERREUR dans fichier 1 :
   afficher fichier 1
sinon :
   si ERREUR dans fichier 2 :
       afficher fichier 2

Imaginons que ERREUR est présent dans les deux fichiers (c'est là que ça coince, non?). Alors ton premier test est vrai ; on affiche le contenu du premier fichier. On ne va par contre pas effectuer ce qu'il y a dans le else, donc même pas vérifier le deuxième if.

Voici un code fonctionnel :

#!/bin/bash
VAR1=$(grep 'ERREUR' fichier1.txt)
VAR2=$(grep 'ERREUR' fichier2.txt)
if [ -n "$VAR1" ] ; then
   cat fichier1.txt
fi
if [ -n "$VAR2" ] ; then
   cat fichier2.txt
fi

Louis

NB : Le "else if" de C/C++/Java/... s'écrit "elif" en Bash.

Hors ligne

#4 Le 08/11/2012, à 10:45

hydro_90

Re : test bash, afficher un fichier s'il contient un motif

Re, et merci pour votre aide; je vais tester tout ça aujourd'hui

Hors ligne

#5 Le 08/11/2012, à 12:50

hydro_90

Re : test bash, afficher un fichier s'il contient un motif

Ok ça marche bien avec le script :

for fic in fichier1.txt fichier2.txt
do
   if grep -q "ERREUR" "$fic"
   then
      cat "$fic"
   fi
done

Merci à vous

Hors ligne

#6 Le 08/11/2012, à 13:04

Postmortem

Re : test bash, afficher un fichier s'il contient un motif

Tu as gagné le droit de passer ce sujet en résolu ! wink


Trusty Tahr (64 bits), Athlon64 3800+, ATI Radeon HD4870

Mot' a dit : « Un Hellfest sans Slayer, c'est comme une galette-saucisse sans saucisse ! »

Hors ligne

#7 Le 09/11/2012, à 18:57

nesthib

Re : test bash, afficher un fichier s'il contient un motif

Ça n'est pas exactement ce qui est demandé, mais perso je ferais :

grep -n -C100 fichier*

c'est tellement plus simple tongue


GUL Bordeaux : GirollServices libres : TdCT.org
Hide in your shell, scripts & astuces :  applications dans un tunnelsmart wgettrouver des pdfinstall. auto de paquetssauvegarde auto♥ awk
  ⃛ɹǝsn xnuᴉꞁ uʍop-ǝpᴉsdnGMT-4

En ligne

Haut de page ↑