L’itération avec la Boucle For en Programmation
La boucle « for » est un outil fondamental dans tous les langages de programmation, permettant d’exécuter des instructions répétitives sur une série d’éléments. Elle est notamment essentielle pour parcourir des collections de données telles que les listes ou les tableaux.
Illustrons ceci avec un exemple simple : considérons une liste de couleurs d’un arc-en-ciel:
1Violet2Indigo3Bleu4VertTable Arc-en-ciel
Pour interagir avec chaque élément de ce tableau, ou pour réaliser des actions répétitives basées sur ses éléments, l’utilisation d’une boucle « for » est indispensable.
La Boucle For en Bash
Dans un script Bash, la structure générale de la boucle « for » se présente de cette manière :
#!/bin/bash for VAR in 1 2 3 4 5 ... N do ACTION 1 ACTION 2 ... done
L’emploi de la boucle « for » en Bash est relativement aisé. La première ligne, #!/bin/bash
, signale que le code qui suit est un script Bash. VAR
est une variable temporaire utilisée pour l’itération. La valeur N
définit le nombre maximal d’itérations. Les mots clés do
et done
marquent respectivement le début et la fin de la boucle. Les ACTION
représentent les commandes qui seront exécutées à chaque itération.
La boucle « for » de Bash peut être employée avec des variables de différentes natures comme des listes, des chaînes de caractères, des nombres entiers ou encore des tableaux. Cet article explorera des exemples courants d’utilisation de la boucle « for » en Bash.
Ces exemples peuvent être exécutés directement via la ligne de commande Bash, ou sauvegardés dans un fichier puis exécutés avec la commande bash nom_du_fichier.sh
.
Lecture d’une Liste Statique
Imaginons la liste suivante: rainbowColorList = Violet, Indigo, Blue, Green, Yellow, Orange, Red
.
Nous pouvons facilement afficher le contenu de cette liste en utilisant une boucle « for » de Bash, comme illustré ci-dessous :
#! /bin/sh # Définition de la liste rainbowColorList=Violet,Indigo,Blue,Green,Yellow,Orange,Red # Utilisation d'un pattern de séparation par virgule for colors in ${rainbowColorList//,/ } do echo $colors done
Le résultat de ce code affichera chaque couleur de la liste sur une nouvelle ligne.
#Résultat Violet Indigo Blue Green Yellow Orange Red
Parcours d’un Tableau
La syntaxe pour déclarer un tableau diffère légèrement. On utilise des parenthèses pour inclure chaque élément (chaîne de caractères) :
rainbowArray=("Violet" "Indigo" "Blue" "Green" "Yellow" "Orange" "Red") for colors in "${rainbowArray[@]}"; do echo "J'aime $colors" done
L’opérateur @
permet de parcourir chaque élément du tableau.
#Résultat J'aime Violet J'aime Indigo J'aime Blue J'aime Green J'aime Yellow J'aime Orange J'aime Red
La boucle « for » peut également être employée pour afficher à la fois les index et les valeurs des éléments d’un tableau.
# Affichage avec index rainbowArray=("Violet" "Indigo" "Blue" "Green" "Yellow" "Orange" "Red") for i in "${!rainbowArray[@]}"; do echo "Couleur à l'index " $i " : " "${rainbowArray[$i]}" i=$((i+1)); done
#Résultat Couleur à l'index 0 : Violet Couleur à l'index 1 : Indigo Couleur à l'index 2 : Blue Couleur à l'index 3 : Green Couleur à l'index 4 : Yellow Couleur à l'index 5 : Orange Couleur à l'index 6 : Red
Remarquez l’utilisation du caractère !
dans la boucle pour accéder à l’index de chaque élément.
Itérer sur une Plage de Nombres
La boucle « for » peut être utilisée pour parcourir une séquence de nombres. Voici un exemple :
# Itération sur une plage de nombres echo "Décompte..." for N in {10..0} do echo "$N" done
L’opérateur ..
indique une plage de valeurs numériques.
#Résultat 10 9 8 7 6 5 4 3 2 1 0
Il est également possible d’itérer sur une plage en effectuant des sauts :
L’exemple suivant montre une itération avec un pas de 3 :
# Itération avec un saut echo "Décompte..." for N in {30..0..3} do echo "$N" done
Ce programme commence à 30 et décrémente jusqu’à 0, avec un pas de 3, comme indiqué par le dernier paramètre « 3 » de la boucle.
#Résultat 30 27 24 21 18 15 12 9 6 3 0
Manipulations de Chaînes et de Caractères
La boucle « for » en Bash permet de réaliser des opérations intéressantes sur les chaînes de caractères. Par exemple, il est possible d’accéder à chaque caractère d’une chaîne grâce à l’opérateur seq
intégré à la boucle :
# Lecture des caractères d'une chaîne myword="bienvenue" for i in $(seq 1 ${#myword}) do echo "${myword:i-1:1}" done
L’opérateur seq
doit commencer à 1 pour extraire le premier caractère en premier.
#Résultat b i e n v e n u e
Nous pouvons également imprimer les mots d’une phrase, un par un :
# Lecture de chaque mot d'une phrase mysentence="Bienvenue sur toptips.fr. Le hub incontournable des passionnés de tech" for word in $mysentence; do echo $word done
#Résultat Bienvenue sur toptips.fr. Le hub incontournable des passionnés de tech
Utilisation d’Expressions
Comme dans d’autres langages tels que Java, des expressions peuvent être utilisées dans une boucle « for » en Bash.
for (( var=10; var>=0; var-- )) do echo "Décompte...$var" done
#Résultat Décompte...10 Décompte...9 Décompte...8 Décompte...7 Décompte...6 Décompte...5 Décompte...4 Décompte...3 Décompte...2 Décompte...1 Décompte...0
Lecture des Arguments en Ligne de Commande
La commande read
permet de lire les arguments passés en ligne de commande. L’exemple suivant illustre comment obtenir des nombres de l’utilisateur, puis calculer et afficher leur somme en utilisant une boucle « for ». La variable total
stocke le cumul des nombres.
read -a array -p "Entrez les nombres que vous souhaitez additionner:" total=0 for i in ${array[@]}; do let total+=$i done echo "La somme des nombres est: $total"
Voici un exemple d’exécution :
#Résultat Entrez les nombres que vous souhaitez additionner: 3 4 66 La somme des nombres est: 73
Déterminer les Nombres Pairs et Impairs
Pour déterminer si les nombres entre 1 et 10 (ou n’importe quel nombre N) sont pairs ou impairs, une condition « if » est nécessaire dans la boucle « for ». Un nombre est considéré pair si le reste de sa division par 2 est égal à 0, et impair dans le cas contraire.
# Initialisation des listes de nombres pairs et impairs evennum="" oddnum="" for (( i=1; i<=10; i++ )) do remainder=$(( $i % 2 )) if [ $remainder -eq 0 ]; then evennum="$evennum $i " else oddnum="$oddnum $i " fi done echo "Les nombres pairs sont: "$evennum echo "Les nombres impairs sont: "$oddnum
Dans l’exemple ci-dessus, la plage est fixée à 10, mais on peut modifier cette valeur. On peut également utiliser la commande read
pour obtenir le nombre de l’utilisateur comme vu dans la section précédente.
#Résultat Les nombres pairs sont: 2 4 6 8 10 Les nombres impairs sont: 1 3 5 7 9
Boucle Infinie
Une boucle infinie est une boucle qui ne s’arrête jamais et qui doit être interrompue de force en utilisant Ctrl+C. On peut créer une boucle infinie en utilisant l’opérateur ; ;
dans une boucle « for » :
for (( ; ; )) do echo "Bienvenue sur toptips.fr" done
#Résultat Bienvenue sur toptips.fr Bienvenue sur toptips.fr Bienvenue sur toptips.fr Bienvenue sur toptips.fr Bienvenue sur toptips.fr Bienvenue sur toptips.fr Bienvenue sur toptips.fr Bienvenue sur toptips.fr Bienvenue sur toptips.fr Bienvenue sur toptips.fr ^C $
L’Instruction Break
L’instruction « break » permet de quitter une boucle dès qu’une condition « if » est vérifiée.
for color in Violet Indigo Blue Green Yellow Orange Red do if [[ "$color" == 'Green' ]]; then break fi echo "Recherche de la couleur verte, la couleur actuelle est $color" done echo "J'ai trouvé ma couleur $color"
Cet exemple cherche la couleur verte. La boucle parcourt chaque couleur, et une fois la couleur verte trouvée, l’instruction « break » arrête l’exécution de la boucle.
#Résultat Recherche de la couleur verte, la couleur actuelle est Violet Recherche de la couleur verte, la couleur actuelle est Indigo Recherche de la couleur verte, la couleur actuelle est Blue J'ai trouvé ma couleur Green
L’Instruction Continue
L’instruction « continue » permet d’ignorer l’itération courante de la boucle et de passer à la suivante, selon une condition donnée. Par exemple, si l’on ne souhaite pas afficher la couleur « Vert » de l’exemple précédent, on peut utiliser « continue », et toutes les autres couleurs seront affichées.
for color in Violet Indigo Blue Green Yellow Orange Red do if [[ "$color" == 'Green' ]]; then continue fi echo "$color" done
#Résultat Violet Indigo Blue Yellow Orange Red
Conclusion
Nous avons exploré les utilisations les plus courantes de la boucle « for » en Bash, notamment avec des chaînes, des entiers, des tableaux et des listes. Si vous apprenez Linux mais possédez un système Windows, vous pouvez utiliser la fonctionnalité WSL pour installer Linux sur votre machine.
Vous pourrez ainsi utiliser le terminal Linux comme vous le feriez avec CMD.
Ensuite, vous pouvez consulter l’article : Comment exécuter des scripts bash avec Python ?