il existe deux types de boucles bash for disponibles. L’un utilisant le mot-clé” in » avec liste de valeurs, un autre utilisant la syntaxe de programmation C comme.
Cet article fait partie de notre série de tutoriels bash en cours.
ceci explique les deux méthodes de boucle bash for, et fournit 12 exemples différents sur la façon d’utiliser la boucle bash for dans vos scripts shell.
signet cet article pour référence future, car c’est le seul article que vous auriez jamais besoin de se référer sur la façon d’utiliser bash pour les boucles avec des exemples.,
Méthode 1: Bash Pour la Boucle à l’aide de « dans” et une liste de valeurs
Syntaxe:
for varname in listdo command1 command2 ..done
Dans la syntaxe ci-dessus:
- pour en, faire et faire sont les mots clés
- « liste” contient une liste de valeurs. La liste peut être une variable qui contient plusieurs mots séparés par des espaces. Si list est manquant dans l’instruction for, il prend le paramètre de position qui a été passé dans le shell.
- varname est un nom de variable Bash.
sous cette forme, l’instruction for exécute les commandes incluses dans un corps, une fois pour chaque élément de la liste., Par exemple, si la liste de valeurs contient 5 éléments, la boucle sera exécuté un total de 5 fois, une fois pour chaque élément dans la liste. L’élément actuel de la liste sera stocké dans une variable « varname” à chaque fois dans la boucle. Cette « varname” peut être traité dans le corps de la boucle for.
Méthode 2: Bash For Loop utilisant une syntaxe similaire à C
la deuxième forme de la boucle for Est similaire à la boucle for dans le langage de programmation « C”, qui a trois expressions (initialisation, condition et mise à jour).,
for (( expr1; expr2; expr3 ))do command1 command2 ..done
Dans le ci-dessus bash pour la syntaxe de commande,
- Avant la première itération, expr1 est évaluée. Ceci est généralement utilisé pour initialiser les variables pour la boucle.
- toutes les instructions entre do et done sont exécutées à plusieurs reprises jusqu’à ce que la valeur de expr2 soit vraie.
- Après chaque itération de la boucle, expr3 est évaluée. Ceci est généralement utilisé pour incrémenter un compteur de boucle.
Les 12 exemples suivants montrent comment bash for loops de différentes manières.,
valeurs statiques pour la liste après le mot-clé « in”
dans l’exemple suivant, la liste des valeurs (lun, mar, mer, jeu et VEN) est directement donnée après le mot-clé « in” dans la boucle bash for.
attention: la liste des valeurs ne doit pas être séparée par une virgule (lun, mar, mer, jeu, ven). La virgule sera traitée comme faisant partie de la valeur. c’est-à-dire Qu’au lieu de « Mon”, il utilisera « Mon” comme valeur, comme indiqué dans l’exemple ci-dessous.
attention: la liste des valeurs ne doit pas être entourée d’un guillemet double. (« Mon Tue Wed Thu Fri”)., Si vous placez un guillemet double, il sera traité comme une seule valeur (au lieu de 5 valeurs différentes), comme indiqué dans l’exemple ci-dessous.
$ cat for1-wrong2.shi=1for day in "Mon Tue Wed Thu Fri"do echo "Weekday $((i++)) : $day"done$ ./for1-wrong2.shWeekday 1 : Mon Tue Wed Thu Fri
Variable de la liste après « en” mot-clé
au Lieu de fournir les valeurs directement dans la boucle for, vous pouvez stocker les valeurs dans une variable et utiliser la variable dans la boucle après le « en” mot-clé, comme le montre l’exemple suivant.
attention: en tant que meilleure pratique, vous devez toujours citer les variables bash lorsque vous les référez. Il y a peu d’exceptions à cette règle des meilleures pratiques. C’est l’un d’entre eux., Si vous doublez la variable dans cette boucle for, la liste des valeurs sera traitée comme une valeur unique. Beaucoup de gens tombent dans ce piège. Soyez prudent et ne doublez pas votre variable dans la boucle for.
ne spécifiez pas la liste; obtenez-la à partir des paramètres de position
Si vous ne spécifiez pas le mot-clé « in” suivi d’une liste de valeurs dans la boucle bash for, il utilisera les paramètres de position (c’est-à-dire les arguments qui sont passés au script shell).
Attention: soyez prudent si vous utilisez cette méthode. Vous ne devez pas inclure le mot-clé « in” dans la boucle for., Si vous laissez le mot-clé” in » sans aucune valeur, il n’utilisera pas le paramètre de position comme indiqué ci-dessous. Il ne sera pas aller à l’intérieur de la boucle. c’est-à-dire que la boucle for ne sera jamais exécutée comme indiqué dans l’exemple ci-dessous.
$ cat for3-wrong.shi=1for day indo echo "Weekday $((i++)) : $day"done$ ./for3-wrong.sh Mon Tue Wed Thu Fri
Remarque: reportez-vous à notre article précédent pour en savoir plus sur les paramètres de position bash.
sortie de la commande Unix en tant que valeurs de liste après le mot-clé « in”
Vous pouvez utiliser la sortie de n’importe quelle commande unix / Linux comme liste de valeurs de la boucle for en enfermant la commande dans les cases de retour » ` comme indiqué ci-dessous.,
parcourez les fichiers et les répertoires dans une boucle for
pour parcourir les fichiers et les répertoires sous un répertoire spécifique, il suffit de cd dans ce répertoire et de donner * dans la boucle for comme indiqué ci-dessous.
L’exemple suivant parcourra tous les fichiers et répertoires de votre répertoire personnel.
l’Utilisation de * dans le bash pour la boucle est similaire au fichier d’expansion que nous utilisons dans la ligne de commande de linux lorsque nous utilisons la commande ls (et d’autres commandes).
par exemple, ce qui suit affichera tous les fichiers et répertoires sous votre répertoire personnel., C’est le concept qui est utilisé dans ce qui précède for5.sh exemple.
cd ~ls *
ce qui suit affichera tous les *.conf fichier qui commence par a, b, ou c ou d sous le répertoire /etc.
$ ls -1 /etc/*.conf/etc/asound.conf/etc/autofs_ldap_auth.conf/etc/cas.conf/etc/cgconfig.conf/etc/cgrules.conf/etc/dracut.conf
le même argument utilisé dans la commande ls ci-dessus peut être utilisé dans une boucle bash for, Comme indiqué dans l’exemple ci-dessous.
sortir de la boucle
Vous pouvez sortir de la boucle à l’aide de ‘pause’ de la commande comme indiqué ci-dessous.,
$ cat for6.shi=1for day in Mon Tue Wed Thu Frido echo "Weekday $((i++)) : $day" if ; then break; fidone$ ./for6.shWeekday 1 : MonWeekday 2 : Tue
continuer à partir du haut de la boucle for
dans certaines conditions, vous pouvez ignorer le reste des commandes de la boucle for et continuer la boucle à partir du haut (pour la valeur suivante de la liste), en utilisant la commande continuer comme indiqué ci-dessous.
l’exemple suivant ajoute « (WEEKEND)” aux Sam et Dim, et « (weekday)” au reste des jours.
bash for loop utilisant la syntaxe du programme C
Cet exemple utilise la 2ème méthode de bash for loop, qui est similaire à la syntaxe C for loop., L’exemple suivant génère 5 nombres aléatoires à l’aide de la boucle bash c-Style for.
9. Infinite Bash for loop
lorsque vous ne fournissez pas le début, la condition et l’incrément dans la boucle bash c-Style for, elle deviendra une boucle infinie. Vous devez appuyer sur Ctrl-C pour arrêter la boucle.
$ cat for9.shi=1;for (( ; ; ))do sleep $i echo "Number: $((i++))"done
Comme nous l’avons dit plus haut, appuyez sur Ctrl-C pour sortir de cet exemple de boucle bash infinite for.,
$ ./for9.shNumber: 1Number: 2Number: 3
en utilisant une virgule dans la boucle de style C bash pour
dans la boucle de style C bash, en plus d’incrémenter la valeur utilisée dans la condition, vous pouvez également incrémenter une autre valeur comme indiqué ci-dessous.
dans la section initialize et la section increment de la boucle bash c-Style for, vous pouvez avoir plusieurs valeurs en séparant par une virgule comme indiqué ci-dessous.
la boucle for suivante est exécutée un total de 5 fois, en utilisant la variable I. Cependant, la variable j commence par 5 et obtient un incrément de 5 chaque fois que la boucle est exécutée. ,
$ cat for10.shfor ((i=1, j=10; i <= 5 ; i++, j=j+5))do echo "Number $i: $j"done$ ./for10.shNumber 1: 10Number 2: 15Number 3: 20Number 4: 25Number 5: 30
plage de nombres après le mot-clé” in «
Vous pouvez parcourir en utilisant la plage de nombres dans la boucle for” in » en utilisant l’extension d’Accolade.
L’exemple suivant parcourt 10 fois en utilisant les valeurs de 1 à 10.
$ cat for11.shfor num in {1..10}do echo "Number: $num"done$ ./for11.shNumber: 1Number: 2Number: 3Number: 4Number: 5...
plage de nombres avec incréments après le mot-clé « in”
L’exemple suivant parcourt 5 fois en utilisant les valeurs 1 à 10, avec un incrément de 2. c’est-à-dire qu’il commence par 1, et continue à incrémenter de 2, jusqu’à ce qu’il atteigne 10.,
$ cat for12.shfor num in {1..10..2}do echo "Number: $num"done$ ./for12.shNumber: 1Number: 3Number: 5Number: 7Number: 9
PS: n’oubliez pas de mettre cet article en signet pour votre référence future.
Si vous avez apprécié cet article, vous aimerez aussi..
|
|