Problème avec boucle while qui ne s'arrêt pas

Problème avec boucle while qui ne s'arrêt pas - Shell/Batch - Programmation

Marsh Posté le 25-10-2009 à 11:24:08    

Salut a tous
 
Voilà mon fichier shell en question ou il y a ma boucle while qui ne s'arrête pas:
 
j'ai donc un fichier ping.txt avec 4 ip donc 4 lignes
quand je fais un echo $NBS_LIGNE j'ai bien 4 lignes
 

Code :
  1. #!/bin/bash
  2. FILE="/home/test/ping.txt"
  3. NBS_LIGNE=`wc -l ping.txt | cut -d" " -f1`
  4. i=1
  5. while [ $i=$NBS_LIGNE ]
  6. do
  7.         HOSTNAME=`head -n $i ping.txt | tail -n 1`
  8.         /bin/ping -c3 $HOSTNAME
  9.         if [ $? != 1 ]
  10.         then
  11.                 echo "$HOSTNAME;OUI"
  12.         else
  13.                 echo "$HOSTNAME;NON"
  14.         fi
  15. i=$(($i + 1))
  16. done


 
mais le problème c'est que quand il arrive à la dernier ligne il ne s'arrête pas. Avez vous une idée du problème? Merci

Reply

Marsh Posté le 25-10-2009 à 11:24:08   

Reply

Marsh Posté le 25-10-2009 à 11:53:51    

Pourquoi t'utilises pas $i < $NBR_LIGNE comme condition? Parce que là je comprend même pas pourquoi ton programme marche vu que $i !=$NBS_LIGNE à la première execution :heink:


---------------
Si la vérité est découverte par quelqu'un d'autre,elle perd toujours un peu d'attrait
Reply

Marsh Posté le 25-10-2009 à 12:08:10    

si je met se que tu me dis il me met:

 

./script_ping.sh: line 11: 4: Aucun fichier ou répertoire de ce type

 

je vois pas du tous le rapport.

Message cité 1 fois
Message édité par hppp le 25-10-2009 à 12:08:24
Reply

Marsh Posté le 25-10-2009 à 13:05:27    

hppp a écrit :

si je met se que tu me dis il me met:

 

./script_ping.sh: line 11: 4: Aucun fichier ou répertoire de ce type

 

je vois pas du tous le rapport.

 

Excuse,tu as tout à fait raison, j'ai parlé trop vite :o

 

Donc voilà la structure que je pense que tu va devoir utiliser

 
Code :
  1. $i = 1;
  2.  
  3. while [ $i -lt $NBS_LIGNE ];
  4. do
  5.  ...traitement
  6.  let i+=1
  7. done
 

Edit : Le message d'erreur qu'il te donne est logique car l'opérateur "<" est une redirection de flux, et non l'opérateur "plus petit que" (qui lui est -lt).


Message édité par esox_ch le 25-10-2009 à 13:06:42

---------------
Si la vérité est découverte par quelqu'un d'autre,elle perd toujours un peu d'attrait
Reply

Marsh Posté le 25-10-2009 à 15:03:14    

c'est pas tip top comme langage quand même le shell je trouve.

Reply

Marsh Posté le 25-10-2009 à 15:11:55    

C'est toi qui fait ça en shell hein :o


---------------
Si la vérité est découverte par quelqu'un d'autre,elle perd toujours un peu d'attrait
Reply

Marsh Posté le 26-10-2009 à 09:50:37    

hppp a écrit :

c'est pas tip top comme langage quand même le shell je trouve.

 

c'est pas l'outil ultime, mais si on ne fait pas n'importe quoi, c'est quand même pratique...

 

Pourquoi compter les lignes, pour faire un head puis un tial, quand on peut faire une boucle sur un cat? 0_o

 
Code :
  1. #!/bin/bash
  2. FILE="/home/test/ping.txt"
  3.  
  4. for HOSTNAME in `cat $FILE`
  5. do
  6.        /bin/ping -c3 $HOSTNAME
  7.        if [ $? != 1 ]
  8.        then
  9.                echo "$HOSTNAME;OUI"
  10.        else
  11.                echo "$HOSTNAME;NON"
  12.        fi
  13. done
 


Message édité par pataluc le 26-10-2009 à 09:50:45
Reply

Marsh Posté le 26-10-2009 à 22:19:44    

Parce que je suis une brèle en Bash et apparemment l'auteur du topic l'est aussi :o
 
Même si c'est lent, que c'est overkill & co, dès que je dois faire un truc de ce genre je passe par Ruby... parce qu'en même temps, le jour où tu veux commencer à rajouter 2-3 features à ton script, t'es relativement vite dans la merde en Bash :o


---------------
Si la vérité est découverte par quelqu'un d'autre,elle perd toujours un peu d'attrait
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed