Bash & if
Résolu
jean
-
midou4u Messages postés 44 Statut Membre -
midou4u Messages postés 44 Statut Membre -
Bonjour,
Petit problème sur un Bash...
J'ai un fichier "liste.txt" comprenant plein de lignes. Je veux pouvoir parcourir chaque ligne et effectuer un traitement sur certaines d'entre elles.
exemple de mon fichier :
"
Next board: press ENTERCoupler INTIPA cr 19, cpl 2, Ghost Eqt 29039
This coupler is not used !
Nb Ip Phones connected to the CPU is: 3880
(1)as1_a> exit
logout
Connection closed by foreign host.
"
mon script :
"
while read line
do
if [ "$test" = "Connection closed by foreign host." ]
then
echo "OK"
fi
done < liste.txt
"
Malheureusement, rien ne s'affiche... j'ai testé toutes les synthaxes : "=", "==", variable entre guillements ou pas, etc.
Je désespère... Si quelqu'un à une piste ca m'aiderait vraiment beaucoup ! Merci d'avance
Petit problème sur un Bash...
J'ai un fichier "liste.txt" comprenant plein de lignes. Je veux pouvoir parcourir chaque ligne et effectuer un traitement sur certaines d'entre elles.
exemple de mon fichier :
"
Next board: press ENTERCoupler INTIPA cr 19, cpl 2, Ghost Eqt 29039
This coupler is not used !
Nb Ip Phones connected to the CPU is: 3880
(1)as1_a> exit
logout
Connection closed by foreign host.
"
mon script :
"
while read line
do
if [ "$test" = "Connection closed by foreign host." ]
then
echo "OK"
fi
done < liste.txt
"
Malheureusement, rien ne s'affiche... j'ai testé toutes les synthaxes : "=", "==", variable entre guillements ou pas, etc.
Je désespère... Si quelqu'un à une piste ca m'aiderait vraiment beaucoup ! Merci d'avance
Configuration: Windows XP Firefox 3.5.7
5 réponses
-
"
while read line
do
if [ "$line" = "Connection closed by foreign host." ]
then
echo "OK"
fi
done < liste.txt
"
C'est $line que j'ai, et pas $test -
Salut,
Quel est le but final de ton script ?
Parce que si c'est juste pour savoir si le texte (fichier) contient la phrase recherchée, un simple "grep" devrait suffire, non ?
-
Tu dois avoir omis de nous préciser quelque chose ;-\
Parce que la syntaxe est la bonne :
jp@MDK:~/tmpfs ssh$ cat plop " Next board: press ENTERCoupler INTIPA cr 19, cpl 2, Ghost Eqt 29039 This coupler is not used ! Nb Ip Phones connected to the CPU is: 3880 (1)as1_a> exit logout Connection closed by foreign host. " jp@MDK:~/tmpfs ssh$ while read line;do if [ "$line" = "Connection closed by foreign host." ]; then echo "$line = OK";fi;done < plop Connection closed by foreign host. = OK jp@MDK:~/tmpfs ssh$
Il est où ton tableau dans le fichier ?
-
ben c'est ça que je ne comprend pas, pour moi la syntaxe est OK !!!
Alors voila le tableau dans liste.txt
"
Mon Jan 18 10:07:23 CET 2010
Coupler INTIPA cr 19, cpl 1, Ghost Eqt 29038
+--------+--------------+--------------------+-+-----+---------------+----+
| QMCDU | Name | Mac Address | |Neqt | Ip Address |
+--------+--------------+--------------------+-+-----+---------------+----+
|61XXXXXX|machin |00:80:xx:xx:xx:xx|S|089xx|126.yyy.yyy.yyy|
|61XXXXXX|truc |00:80:xx:xx:xx:xx|S|099xx|126.yyy.yyy.yyy|
|61XXXXXX|bidule |00:80:xx:xx:xx:xx|S|089xx|126.yyy.yyy.yyy|
+--------+--------------+--------------------+-+-----+---------------+----+---+
In the first single column
S: means sig. channel is supported by this board for these Ip phones
"
etc.
je fais donc
"
while read line
do
if [ "$line" = "|61*" ];
then echo "$line"
#else
#echo "NOK"
fi
done < liste.txt
"
La ça devrait aller non ?
mais même si au lieu de "|61*" je met l'intégralité de la ligne ça ne fonctionne quand même pas
-
-
Voir le man bash (EXPRESSIONS CONDITIONNELLES) :
chaîne_1 == chaîne_2 Vrai si les deux chaînes sont égales. Le symbole = peut servir à remplacer == chaîne_1 != chaîne_2 Vrai si les deux chaînes sont différentes. chaîne_1 < chaîne_2 Vrai si chaîne_1 se trouve avant chaîne_2 dans l'ordre lexi- cographique de la localisation en cours. chaîne_1 > chaîne_2 Vrai si chaîne_1 se trouve après chaîne_2 dans l'ordre lexi- cographique de la localisation en cours. -
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question -
a=b veut dire affectation
a = b veut dire une comparaison