Implémenter la boucle for dans Bash
- Bash
forboucle - Syntaxe de la boucle
forde style C de Bash - Syntaxe de style Bash
Foreach/For-in - Définition des plages et de la taille des sauts dans la boucle Bash
for - Création de la boucle
fordans l’invite Bash et résolution du problème avec la délimitation du point-virgule;
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 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 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