Shell boucle et condition

Shell boucle et condition - Codes et scripts - Linux et OS Alternatifs

Marsh Posté le 09-12-2008 à 17:15:43    

Bonjour,
 
Je lis le contenu d'un fichier. Ce dernier contient des noms de répertoire.
 
Pour chaque fichier dont le nom est test_moisannee, suite du code ...echo ...
 
Comment puis-je sortir de la boucle i et continuer la boucle j si $j/test_$YYYYMM.html n'est pas présent ?
 
Merci bien
 

Code :
  1. #!/bin/bash
  2. YYYYMM=`date '+%Y%m'`
  3. for j in `cat /tmp/liste`;
  4. do 
  5. for i in $j/test_$YYYYMM.html;
  6. if [ ! -e "$i" ]; then
  7.    echo -e "\n\n ====> $j aucune données\n\n"
  8.    exit
  9. fi
  10. ....
  11. echo ...
  12. done
  13. done


Reply

Marsh Posté le 09-12-2008 à 17:15:43   

Reply

Marsh Posté le 09-12-2008 à 17:21:16    

break


---------------
Blog photo/récits activités en montagne http://planetcaravan.net
Reply

Marsh Posté le 09-12-2008 à 17:21:30    

avec un break bien placé ;)

Reply

Marsh Posté le 09-12-2008 à 18:07:10    

Merci beaucoup zecrazytux et m3z, il fallait y penser.

Reply

Marsh Posté le 10-12-2008 à 09:30:33    

Ta première boucle for ne va pas marcher si un de tes noms de fichier contient un espace. Il vaut mieux faire un cat /tmp/liste | while read j

Reply

Marsh Posté le 10-12-2008 à 09:35:06    

C'est corrigé. Merci matafan pour ce complément d'info.

Reply

Marsh Posté le 12-12-2008 à 20:23:45    

ou mieux :
while read j; do stuff; done < /tmp/liste
 
Useless use of cat, toussa...

Reply

Marsh Posté le 12-12-2008 à 22:41:50    

Mouais dans le cas du while j'aime quand même mieux utiliser cat, sinon le nom de fichier est trop loin de l'endroit où il est utilisé... Pas génial pour la lisibilité.

Reply

Marsh Posté le 13-12-2008 à 12:15:04    

matafan a écrit :

Mouais dans le cas du while j'aime quand même mieux utiliser cat, sinon le nom de fichier est trop loin de l'endroit où il est utilisé... Pas génial pour la lisibilité.


 
http://partmaps.org/era/unix/award.html#backticks

Message cité 1 fois
Message édité par Mjules le 13-12-2008 à 12:16:57

---------------
Celui qui pose une question est idiot 5 minutes. Celui qui n'en pose pas le reste toute sa vie. |  Membre du grand complot pharmaceutico-médico-scientifico-judéo-maçonnique.
Reply

Marsh Posté le 13-12-2008 à 16:09:59    

Reply

Marsh Posté le 13-12-2008 à 16:09:59   

Reply

Marsh Posté le 13-12-2008 à 21:04:22    

matafan a écrit :

Ta première boucle for ne va pas marcher si un de tes noms de fichier contient un espace. Il vaut mieux faire un cat /tmp/liste | while read j


Pour ce pbm d'espace je change la variable IFS avant
 

Code :
  1. IFS=$'\n\t'
  2.   for j in `cat /tmp/liste`;
  3. do
  4. ..................
  5. done


 

Reply

Marsh Posté le 13-12-2008 à 21:05:21    

matafan a écrit :


:heink:
Quel rapport avec la discussion ?


aucun, je me sers du forum comme d'un bookmark


---------------
Celui qui pose une question est idiot 5 minutes. Celui qui n'en pose pas le reste toute sa vie. |  Membre du grand complot pharmaceutico-médico-scientifico-judéo-maçonnique.
Reply

Marsh Posté le 16-12-2008 à 00:45:28    

Reply

Sujets relatifs:

Leave a Replay

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