[ KSH ] Etrange comportement d'un while dans un for - RESOLU -

Etrange comportement d'un while dans un for - RESOLU - [ KSH ] - Shell/Batch - Programmation

Marsh Posté le 11-02-2010 à 13:53:22    

Bonjour,  
 
J'ai tenté un truc assez simple en shell ksh, mais surprise, le résultat n'est pas du tout ce que je demande, explication :
 
BUT : rechercher des fichiers listés dans une fichier source dans différentes arborescences ayant un nom de USER composé d'un mot et d'un incide.
Genre CPT01, CPT02, CPT03 etc etc....
 
Pour l'instant je bataille simplement avec les deux boucles inclusives pour simplifier le code :

Code :
  1. typeset -Z2 i=1
  2. for fic in $(cat ${1})
  3. do
  4. # Boucle de recherche dans chaque couloir
  5. while [ ${i} -le 3 ]
  6. do
  7.  # Rechercher sur un couloir
  8.  echo "Recherche fichier <${fic}> sur le compte CPT${i}"
  9.  i=$((${i}+1))
  10. done
  11. done


 
Le fichier en entrée ne contient, pas exemple que trois ligne "titi", "toto", "tata"
 
Le résultats est assez déroutant : la boucle du FOR ne prend que la première ligne tandis que le while est entièrement traité :
 
./test.ksh toto
Recherche fichier <titi> sur couloir TEST01
Recherche fichier <titi> sur couloir TEST02
Recherche fichier <titi> sur couloir TEST03
 
 
Maintenant si j'adapte le code pour avoir deux FOR (solution que je trouve un peu plus sale du fait de l'énumération des cas à la main...
 

Code :
  1. typeset -Z2 i=1
  2. for fic in $(cat ${1})
  3. do
  4. # Boucle de recherche dans chaque couloir
  5. for i in 1 2 3
  6. do
  7.  # Rechercher sur un couloir
  8.  echo "Recherche fichier <${fic}> sur couloir TEST${i}"
  9. done
  10. done


 
Ben là ça marche super :  
 
./test.ksh toto
Recherche fichier <titi> sur couloir TEST01
Recherche fichier <titi> sur couloir TEST02
Recherche fichier <titi> sur couloir TEST03
Recherche fichier <toto> sur couloir TEST01
Recherche fichier <toto> sur couloir TEST02
Recherche fichier <toto> sur couloir TEST03
Recherche fichier <tata> sur couloir TEST01
Recherche fichier <tata> sur couloir TEST02
Recherche fichier <tata> sur couloir TEST03
 
Ce n'est pas vraiment un problème seulement ça me détruit de ne pas comprendre le coup du while ! Car derrière biensûr il s'agit de transformer la valeur en dur du nombre d'environnements à tester (ici 3) en un variable, histoire d'avoir un joli WHILE [ ${i} -le ${max_env} ]....
 
Voilà voilà, si un gourou local KSH pouvait me prêter sa Lumière ^^
 
Merci d'avance


Message édité par Kerrozen le 16-02-2010 à 15:25:19
Reply

Marsh Posté le 11-02-2010 à 13:53:22   

Reply

Marsh Posté le 11-02-2010 à 16:25:29    

ca répond pas à la question, mais en ce qui concerne l'énumération à la main, tu peux utiliser seq.
 
seq 10 => 1 2 3 4 5 6 7 8 9 10 par exemple.
 

Reply

Marsh Posté le 11-02-2010 à 16:46:57    

euh, sinon je crois que j'ai trouvé ton problème... tu initialise ton i en dehors de ton for...

Reply

Marsh Posté le 11-02-2010 à 18:40:14    

Ben euh.... je pense pas que ce soit ça le souci :
quand tu arrives dans le while, le i est bien initialisé à 1, et donc inférieur à 3 ; sinon tu auras pas les trois lignes en sortie indexées sur TESTXX
 
Donc le while est correctement exécuté, c'est la boucle du FOR au dessus qui n'est plus active à la sortie du while qui me gène et que je ne comprend pas.
 
Mais merci quand même d'avoir jeté un oeil ;-)

Reply

Marsh Posté le 12-02-2010 à 12:28:19    

Kerrozen a écrit :

Ben euh.... je pense pas que ce soit ça le souci :
quand tu arrives dans le while, le i est bien initialisé à 1, et donc inférieur à 3 ; sinon tu auras pas les trois lignes en sortie indexées sur TESTXX
 
Donc le while est correctement exécuté, c'est la boucle du FOR au dessus qui n'est plus active à la sortie du while qui me gène et que je ne comprend pas.
 
Mais merci quand même d'avoir jeté un oeil ;-)


La première fois uniquement (pour le premier $fic)


---------------
oui oui
Reply

Marsh Posté le 13-02-2010 à 09:38:30    

Kerrozen a écrit :

Ben euh.... je pense pas que ce soit ça le souci :
quand tu arrives dans le while, le i est bien initialisé à 1, et donc inférieur à 3 ; sinon tu auras pas les trois lignes en sortie indexées sur TESTXX
 
Donc le while est correctement exécuté, c'est la boucle du FOR au dessus qui n'est plus active à la sortie du while qui me gène et que je ne comprend pas.
 
Mais merci quand même d'avoir jeté un oeil ;-)


 
Mets ton i à 1 avant le while mais après le "do" du premier for  :p


---------------
Vous ne pouvez pas apporter la prospérité au pauvre en la retirant au riche.
Reply

Marsh Posté le 16-02-2010 à 15:24:27    

Sve@r a écrit :


 
Mets ton i à 1 avant le while mais après le "do" du premier for  :p


 
 :heink:  
...
 
ah bah euh... bah...  
 
...
 
Bah voui en fait hein... c'est mieux de réinitialiser la variable pour chaque passage ; ça fonctionne nettement mieux !  :ange:  
 
Bon ben, merci d'avoir palié à mon excès de neuneutisation sur ce coup là.  
 
J'vais peut-être penser à me reconvertir dans la pizza à domicile, ou l'élevage d'escargot ^^  :sweat:  
 
Sujet clos, merci à vous !

Reply

Sujets relatifs:

Leave a Replay

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