Boucle for

Syntaxe :

La boucle for permet de traiter une liste de valeurs indiquée à droite du mot clé in.
A chaque tour de boucle, la variable var est initialisée avec une des valeurs de la liste.
Elles sont traitées dans l'ordre de leur énumération.

Liste de valeurs citée directement

for var in valeur1 valeur2 valeur3 ... valeurn
do
     commande
done

Liste de valeurs contenue dans une variable

for var in $variable
do
     commande
done

Liste de valeurs générée par substitution de commande

for var in `commande`
do
     commande
done

Liste de valeurs générée par substitution de caractères de génération de noms de fichiers

for var in *.ext
do
     commande
done

Liste par défaut : Arguments de la ligne de commande

for var
do
     commande
done

for var in $*
do
     commande
done

Avec incrémentation d'une variable

for (( var=valeurMin; var<=valeurMax; var++ ))
do
     commande
done

Exemple :

Un script compte à rebours

$ nl boucleFor01.sh
     1  #!/bin/bash
     2  for var in 10 9 8 7 6 5 4 3 2 1 0
     3  do
     4          echo "$var"
     5  done
     6  exit 0
$ ./boucleFor01.sh
10
9
8
7
6
5
...
$

Lister les fichiers d'un ou plusieurs dossiers

$ nl boucleFor02.sh
     1  #!/bin/bash
     2  if [[ $# -lt 1 ]]
     3  then
     4          echo "Nombre d'argument incorrect"
     5          echo "Utilisation $0 dossier1 dossier2 dossiern"
     6          exit 1
     7  fi
     8  for dossier in $*
     9  do
    10          if [[ -d $dossier ]]
    11          then
    12                  echo "Liste des fichiers du dossier $dossier"
    13                  for fichier in `ls $dossier`
    14                  do
    15                          echo "$fichier"
    16                  done
    17          fi
    18  done
    19  exit 0
$ ./boucleFor02.sh coucou 24902 25013 25031
Liste des fichiers du dossier coucou
test
Liste des fichiers du dossier 24902
fichier_0
fichier_1
fichier_2
fichier_3
Liste des fichiers du dossier 25013
fichier_0
fichier_1
fichier_2
Liste des fichiers du dossier 25031
fichier_0
fichier_1
fichier_2
fichier_3
$

En utilisant une variable incrémentée :

$ for (( i=0; i <= 10; i++ )); do echo $i; done
0
1
2
3
4
5
6
7
8
9
10
$

Idem avec la syntaxe suivante :

$ for i in {0..10}; do echo $i; done
0
1
2
3
4
5
6
7
8
9
10
$

Etiquettes: 

Commentaires

pour une incrémentation il existe la commande seq.

for i in `seq 1 10`; do
echo "on traite $i";
done

J'en parle dans cet article

Ajouter un commentaire

Filtered HTML

  • Les adresses de pages web et de messagerie électronique sont transformées en liens automatiquement.
  • Tags HTML autorisés : <a> <em> <strong> <cite> <blockquote> <code> <ul> <ol> <li> <dl> <dt> <dd>
  • Les lignes et les paragraphes vont à la ligne automatiquement.

Plain text

  • Aucune balise HTML autorisée.
  • Les adresses de pages web et de messagerie électronique sont transformées en liens automatiquement.
  • Les lignes et les paragraphes vont à la ligne automatiquement.
CAPTCHA
Cette question permet de s'assurer que vous êtes un utilisateur humain et non un logiciel automatisé de pollupostage.
CAPTCHA visuel
Entrez les caractères (sans espace) affichés dans l'image.