Bash & if

Résolu
jean -  
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
A voir également:

5 réponses

jean
 
"
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   Statut Modérateur Dernière intervention   4 896
 
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
jean
 
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   Statut Modérateur Dernière intervention   4 896
 
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
jean
 
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   Statut Modérateur Dernière intervention   4 896 > jean
 
Essaie comme ça :

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

;-))
0
jean > jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention  
 
énorme !!! Merci beaucoup !! une explication peut être ? pour quoi "\>" au lieu de "=" ?
Merci encore !!!
0
jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention   4 896
 
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   Statut Membre Dernière intervention   3
 
a=b veut dire affectation
a = b veut dire une comparaison
0