Bash & if
Résolu
jean
-
midou4u Messages postés 42 Date d'inscription Statut Membre Dernière intervention -
midou4u Messages postés 42 Date d'inscription Statut Membre Dernière intervention -
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
A voir également:
- If -eq bash
- Bingo bash - Télécharger - Divers Jeux
- If out - Forum Matériel & Système
- Bash list ✓ - Forum Shell
- Bash permission non accordée - Forum Shell
- Bash pause ✓ - Forum Shell
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
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 ?
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 :
Il est où ton tableau dans le fichier ?
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
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