Articles de Bash

LES BOUCLES

Les boucles sont utilisées pour exécuter x fois une opération. Il existe quelques méthodes pour itérer des commandes.

Boucle for

On affiche tous les jours de la semaine. Ces derniers font partie de la liste.

for jours in Lundi Mardi Mercredi Jeudi Vendredi Samedi Dimanche
do
  echo $jours
done

Au lieu d'inclure une liste (Lundi, Mardi...), il est possible de passer un paramètre. Par exemple, on pourrait afficher tous les fichiers qui commenceraient par b.

for fichier in b*
do
  echo $fichier
done

Notez qu'on aurait obtenu le même résultat en tapant ls b*

Il est possible de mettre la liste des valeurs dans une variable et ensuite de ce servir de cette dernière.

JOURS=" Lundi Mardi Mercredi Jeudi Vendredi Samedi Dimanche"
for jours in `echo $JOURS`
do
  echo $jours
done

Jusqu'à maintenant, la boucle for qu'on n'a vue n'avait rien à voir avec celle que plusieurs sont habitués d'utiliser en C. Il est bien sûr possible d'avoir une syntaxe similaire. Dans cet exemple, on affiche les chiffres de 1 à 10 et de 10 à 1.

MAX=10
MIN=0
for(( a=1, b=10; a < MAX, b > MIN; a++,b--))
do
 echo $a $b
done

Notez qu'il est obligatoire de mettre une double parenthèse. Nous avons mis deux conditions dans la boucle, aussitôt qu'une des deux est fausse, la bouche est arrêtée. Changez la valeur de MIN pour 3 par exemple et vous allez comprendre...

Boucle while

Cette boucle teste à l'entré si la condition est vraie et boucle tant que cette dernière est vrai.

i=0
j=5
while [ "$i" -lt "$j" ] # tant que i < j
do
  echo "$i"
  i=`expr $i + 1` #ou i++
done

Boucle until

On pourrait dire que cette boucle est l'opposé de la boucle while. Cette boucle teste à l'entrée la condition et boucle tant que cette dernière est fausse.

i=0
j=5
until [ "$i" -lt "$j" ] # tant que i < j
do
  echo "$i"
  i=`expr $i + 1` #ou i++
done

#on affiche i tant que i et j sont identique, bouclerais à l'infini si on n'avait pas mis la condition de test à l'intérieur.
i=0
j=0
until [ "$i" -lt "$j" ]
do
  echo "$i"
  i=`expr $i + 1` #ou i++i
  if [ $i = 8 ]; then
    j=15
  fi
done

Nous avons complété la partie traitant des boucles. Un script avec tous les exemples peut être téléchargé ici.

Article écrit par: Marc Collin


Page valide XHTML 1 Strict