Bash & if

Résolu/Fermé
jean - 18 janv. 2010 à 11:00
midou4u Messages postés 42 Date d'inscription lundi 8 décembre 2008 Statut Membre Dernière intervention 3 mars 2011 - 18 janv. 2010 à 13:43
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

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
0
jipicy Messages postés 40842 Date d'inscription jeudi 28 août 2003 Statut Modérateur Dernière intervention 10 août 2020 4 895
18 janv. 2010 à 11:29
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 ?
0
Merci pour ton aide

en fait j'ai un tableau dedans avec des lignes :

|12345678|jean|blabla
|87654321|truc|machin

et je veux a chaque fois récupérer
$nombre = 12345678
$nom = "jean"
$texte = "blabla"

puis lors de la 2eme iteration

$nombre = 87654321
$nom = "truc"
$texte = "machin"
0
jipicy Messages postés 40842 Date d'inscription jeudi 28 août 2003 Statut Modérateur Dernière intervention 10 août 2020 4 895
18 janv. 2010 à 11:58
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 ?

0
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
0
jipicy Messages postés 40842 Date d'inscription jeudi 28 août 2003 Statut Modérateur Dernière intervention 10 août 2020 4 895 > jean
18 janv. 2010 à 12:14
Essaie comme ça :

if [ "$line" \> "|61" ]; then

;-))
0
jean > jipicy Messages postés 40842 Date d'inscription jeudi 28 août 2003 Statut Modérateur Dernière intervention 10 août 2020
18 janv. 2010 à 12:17
énorme !!! Merci beaucoup !! une explication peut être ? pour quoi "\>" au lieu de "=" ?
Merci encore !!!
0
jipicy Messages postés 40842 Date d'inscription jeudi 28 août 2003 Statut Modérateur Dernière intervention 10 août 2020 4 895
18 janv. 2010 à 12:21
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.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
midou4u Messages postés 42 Date d'inscription lundi 8 décembre 2008 Statut Membre Dernière intervention 3 mars 2011 3
18 janv. 2010 à 13:43
a=b veut dire affectation
a = b veut dire une comparaison
0