[bash]Comment utiliser les for((i=0;critere;i++))

Comment utiliser les for((i=0;critere;i++)) [bash] - Shell/Batch - Programmation

Marsh Posté le 28-07-2004 à 10:14:13    

voila je bloque sur une boucle for à la C
 
 

Code :
  1. $file=`ls`; #pour simplifier la comprehension 
  2.   for ((i=0 ; "`echo "$file" | grep -x $newfile`"=="$newfile" ; i++))
  3.           do
  4.                   newfile="`echo $1 | cut -d "." -f1`$i.`echo $1 | cut -d "." -f2`";
  5.                   echo "i=$i newfile=$newfile";
  6.   done


 
explication :
echo "$file" => liste les fichiers par ligne
`echo "$file" | grep -x $newfile` => renvoie le fichier recherché. Si le fichier ne s'y trouve ca renvoie ""  
 
 
on tape le nom du script avec comme 1er parametre le nom d'un fichier. Si le fichier n'existe pas dans le repertoire, $newfile prendra le nom de ce fichier à savoir $1 (j'ai fais un test avec un if pour ca). Mais si ce n'est pas le cas, on va alors essayer de trouver un nom de fichier qui n'existe pas encore et c'est le role de la boucle for. Pour generer un nouveau nom on insere un nombre juste avant le point de l'extenstion...
 
 
Exemple :  
on 4 fichiers dans le repertoires ($file):
test.png
test1.png
test2.png  
test3.png
 
et bien le fichier prendra comme nom :  
echo $newfile => test4.png

Reply

Marsh Posté le 28-07-2004 à 10:14:13   

Reply

Marsh Posté le 28-07-2004 à 10:40:26    

weed a écrit :


[fixed]
 $file=`ls`; #pour simplifier la comprehension  
  for ((i=0 ; "`echo "$file" | grep -x $newfile`"=="$newfile" ; i++))  
          do  
                  newfile="`echo $1 | cut -d "." -f1`$i.`echo $1 | cut -d "." -f2`";  
                  echo "i=$i newfile=$newfile";  
  done
[/cpp]


 
1ere chose : for n'accepte que des expressions arithmetique, donc ta comparaison de chaine le met dedans
 
2eme chose : ta bibouille pour voir si le fichier existe est un peu tordu ;) voit plutôt cet extrai du man de test :

Citation :

-e FILE
 FILE exists

Reply

Marsh Posté le 28-07-2004 à 10:50:06    

bobuse a écrit :

1ere chose : for n'accepte que des expressions arithmetique, donc ta comparaison de chaine le met dedans


 
 
je i pas le droit de faire uniquement des tests avec des nombres et non pas avec des chaines de caracteres ?  
c'est bien ca ...
 
bon pas grave je vais faire un grep -c pour compter le nombre de correspondance et tester si ca vaut 1 ou 0
 
 

bobuse a écrit :


2eme chose : ta bibouille pour voir si le fichier existe est un peu tordu ;) voit plutôt cet extrai du man de test :

Citation :

-e FILE
 FILE exists



en fait c'est une liste de fichier recuperer sur un ftp avec ncftpls, donc je ne pense pas que ta solution soit bonne


Message édité par weed le 28-07-2004 à 10:51:41
Reply

Marsh Posté le 28-07-2004 à 10:52:53    

weed a écrit :


 
en fait c'est une liste de fichier recuperer sur un ftp avec ncftpls, donc je ne pense pas que ta solution soit bonne


 
arf, ok !
L'info me manquait ;)

Reply

Marsh Posté le 28-07-2004 à 10:53:29    

et yoooooooooooooooooooooooo man tu es trop bobuse ;)
tu es trop fort, je viens de faire un  
 

Code :
  1. for ((i=0 ; "`echo $file | grep -xc $newfile`"==1 ; i++))
  2.         do
  3.                 echo "i=$i avant";
  4.                 newfile="`echo $1 | cut -d "." -f1`$i`echo $1 | cut -d "." -f2`";
  5.                 echo "i=$i newfile=$newfile";
  6.         done


 
et ca fonctionne  
thxxxxxxxxx bobuse

Reply

Marsh Posté le 28-07-2004 à 11:24:41    

you're welcome :D

Reply

Marsh Posté le 30-07-2004 à 00:00:35    

grep -xq + test de la valeur de retour c'est mieux que grep -xc + comparaison de la sortie.

Reply

Sujets relatifs:

Leave a Replay

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