Bash & if

Résolu
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
Configuration: Windows XP
Firefox 3.5.7

5 réponses

  1. "
    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
    1. Modérateur
      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 ?
      1. 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"
    2. Modérateur
      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 ?

      1. 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
      2. Modérateur
        @jeanEssaie comme ça :

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

        ;-))
      3. @jipicyénorme !!! Merci beaucoup !! une explication peut être ? pour quoi "\>" au lieu de "=" ?
        Merci encore !!!
    3. Modérateur
      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.