Implémenter la boucle for dans Bash

Muhammad Husnain 30 janvier 2023
  1. Bash for boucle
  2. Syntaxe de la boucle for de style C de Bash
  3. Syntaxe de style Bash Foreach/For-in
  4. Définition des plages et de la taille des sauts dans la boucle Bash for
  5. Création de la boucle for dans l’invite Bash et résolution du problème avec la délimitation du point-virgule ;
Implémenter la boucle for dans Bash

Ce tutoriel discutera des formulations de script Bash disponibles pour écrire une boucle for Bash.

Tout d’abord, nous apprendrons sa syntaxe et ses concepts de base. Plus tard, nous apprendrons ses différents types dans le script Bash, comme la notation de boucle for de style C et le style foreach ou for-in.

Enfin, nous conclurons en abordant la question du point-virgule ; tout en faisant la boucle for dans l’invite bash.

Bash for boucle

Une boucle dans un langage de programmation ou de script est une structure de contrôle itérative utilisée pour exécuter de manière répétitive une instruction ou un ensemble d’instructions jusqu’à ce qu’un certain critère ne soit pas rempli.

La boucle for est la structure de bouclage qui est particulièrement utilisée lorsqu’une ou plusieurs instructions ou un ensemble de commandes doivent être exécutés un nombre de fois spécifié. Nous pouvons également utiliser la boucle for dans l’invite bash et le script Bash.

Le script Bash propose deux syntaxes pour écrire les boucles for. La première est connue sous le nom de boucle de style C ou de boucle à trois expressions, et elle est presque la même que la formulation en langage C pour la boucle for.

La deuxième formulation est une célèbre construction de style foreach ou for-in, qui a également été adoptée par de nombreux langages de programmation populaires comme PHP, Python, C#, C++11, Ruby et bien d’autres.

Syntaxe de la boucle for de style C de Bash

Ce style utilise trois expressions comme le langage C pour spécifier le nombre d’itérations de boucle.

for (( initialization; condition; increment/decrement ))
do
	Shell command[s]
done

Exemple : Supposons que nous voulions écrire un script qui pourrait nous aider à imprimer un tableau de n’importe quel nombre fourni par l’utilisateur. Nous pouvons le faire en utilisant le code suivant.

#!/bin/bash
echo "Enter a Number: "
read number

for ((j=1;j<=10;j++))
do  
   echo "$number X $j = $((number*j))"
done

Le code ci-dessus prend un nombre de l’utilisateur et imprime sa table jusqu’à 10. Supposons que l’utilisateur entre 5 comme nombre, la sortie du programme sera la suivante :

Enter a Number:
5
5 X 1 = 5
5 X 2 = 10
5 X 3 = 15
5 X 4 = 20
5 X 5 = 25
5 X 6 = 30
5 X 7 = 35
5 X 8 = 40
5 X 9 = 45
5 X 10 = 50

Syntaxe de style Bash Foreach/For-in

Ce type de boucle for attend une liste de valeurs/éléments et effectue une seule itération pour chaque élément de la liste. La liste peut être fournie en séparant chaque élément dans un seul espace, ou vous pouvez spécifier une plage.

for Counter in 1 2 3 4 5 .. N
do
	1st statement
	2nd statement
	nth statement
done

Exemple : imprimez Hello World cinq fois.

#!/bin/bash
for c in 1 2 4 5 6 
do
   echo "$c Hello World"
done

Production :

1 Hello World
2 Hello World
4 Hello World
5 Hello World
6 Hello World

Veuillez noter le 3 manquant. Ce nombre est manqué car la boucle itère uniquement pour le nombre d’éléments indiqués dans la liste. Ainsi, la variable c est d’abord affectée d’une valeur 1, et une seule itération est effectuée.

Après cela, 2 est attribué à c, et la deuxième itération est effectuée. Plus tard, la valeur suivante immédiate dans la liste (c’est-à-dire 4) est affectée au c, et le processus se poursuit jusqu’à ce que toute la liste soit terminée.

Remarque : Les éléments de la liste ci-dessus peuvent être le nom de différents fichiers. De plus, il peut résulter d’une commande bash ou d’un tableau au lieu d’éléments séparés par des espaces.

for Item in File_0 File_1 File_N
do
	Some Operations on Item
done

OU

for Item in $(Command)
do
	Some Operations on Item    
done

Lorsqu’une commande est utilisée avec la boucle for, la variable Item sera affectée à chacun des jetons de sortie un par un. Par exemple, le script suivant imprimera tous les fichiers ou dossiers commençant par f dans le répertoire courant en utilisant la boucle for.

#!/bin/bash
for Item in $(ls f*)
do
   echo "$Item"
done

Définition des plages et de la taille des sauts dans la boucle Bash for

Si vous savez qu’il n’y a pas de nombre manquant entre certaines valeurs de début et de fin. Même si la différence entre les deux valeurs consécutives, aussi appelée taille de saut, est supérieure à 1, vous pouvez utiliser la boucle for avec la syntaxe suivante.

for i in {Start_Value..End_Value..Jump_Size}
  do 
     Statement(s)
 done

Exemple : L’impression de tous les nombres pairs entre 10 et 20 nécessitera la Start_Value=10, la End_Value=20 et la Jump_Size=2.

#!/bin/bash
for evenNumber in {10..20..2}
  do 
     echo "$evenNumber"
 done

Production :

10
12
14
16
18
20

Création de la boucle for dans l’invite Bash et résolution du problème avec la délimitation du point-virgule ;

Le ; est utilisé pour délimiter ou terminer des commandes sur une seule ligne. Il existe également d’autres délimiteurs, tels que &.

Cependant, lorsque le ; est utilisé pour terminer la commande, la commande suivante n’est exécutée qu’après l’exécution complète de la commande précédente, également appelée exécution synchrone.

Supposons que vous vouliez écrire une boucle for sur une seule ligne dans l’invite bash sans utiliser newline comme terminateur d’instruction, alors vous pouvez utiliser la syntaxe suivante tirée du Bash reference manual.

for Item [ [in [List of Items] ] ; ] do commands; done

Exemple : Le code suivant est équivalent à notre script précédent pour l’impression des nombres pairs.

#!/bin/bash
for even in {10..20..2} ; do echo "$even";done
Remarque
Veuillez noter que les commandes viennent directement après le mot clé do. Par conséquent, en ajoutant un ; après le do générera une erreur de syntaxe.

La syntaxe des trois expressions ou de la boucle for de type C est la suivante.

for (( Initilization ; Condition ; Increment/Decrement )) ; do commands ; done

Exemple:

#!/bin/bash
for ((i=10;i<20;i=i+2));do echo "$i"; done
Muhammad Husnain avatar Muhammad Husnain avatar

Husnain is a professional Software Engineer and a researcher who loves to learn, build, write, and teach. Having worked various jobs in the IT industry, he especially enjoys finding ways to express complex ideas in simple ways through his content. In his free time, Husnain unwinds by thinking about tech fiction to solve problems around him.

LinkedIn

Article connexe - Bash Loop