En programmation ou en scripting, la boucle est l'un des concepts les plus basiques et les plus puissants. Une boucle exécute certaines tâches jusqu'à ce que les conditions spécifiées soient remplies. Chaque langage de programmation ou de script a différentes manières de mettre en œuvre le concept.
Dans ce guide, découvrez la boucle imbriquée dans les scripts bash.
Boucle imbriquée
Une boucle, par définition, effectue certaines tâches jusqu'à ce que les conditions soient remplies. Que faire si la tâche comprend l'exécution d'une boucle? C'est le concept d'une boucle imbriquée. Une boucle dans une boucle.
C'est la structure de base d'une boucle.
tandis que (condition)# quelque chose
Ici, la boucle while continuera à effectuer les tâches déclarées à l'intérieur du bloc tant que la condition est remplie. Dans le cas d'une boucle while imbriquée, la structure ressemblerait à ceci.
# boucle principaletandis que (condition)
# boucle imbriquée
tandis que (condition)
# quelque chose
En théorie, les boucles imbriquées peuvent aller à une profondeur infinie. Dans de nombreuses situations, les boucles imbriquées peuvent être la solution parfaite.
Boucle dans le script bash
Bash est un puissant langage de script. Il existe différentes structures de boucle dans le bash. Les plus populaires sont les boucles for, while et until. Si vous êtes déjà familiarisé avec la programmation C/C++, la syntaxe sera certainement assez similaire.
Pour les boucles
La boucle for est l'une des sorties de formulaires les plus courantes et polyvalentes, etc. La structure des boucles dans les scripts bash. La structure ressemble également beaucoup à la boucle for en C/C++.
La structure de la boucle for dans bash est la suivante.
for ((initialiser ; condition ; incrémenter)); fais# quelque chose
Fini
La structure est très explicite. La section d'initialisation n'est pas obligatoire. Cependant, la condition et l'incrément sont prioritaires.
Mettons-le en action. Voici un script bash très simpliste qui implémente la boucle for.
pour ((i = 0 ; je < 5 ; i++)); doecho "bonjour tout le monde"
Fini
Il est également possible d'utiliser list/range comme condition de boucle. C'est particulièrement utile si vous travaillez avec une liste de fichiers, des plages de nombres, des tableaux, des sorties de commande, etc. La structure ressemble à ceci.
pour l'article dans- ; fais
- Bash boucle infinie
- Entrée utilisateur du script Bash
- Tableau de retour de fonction Bash
# quelque chose
Fini
Par exemple, le script suivant imprimera "hello world" cinq fois.
pour i dans 1… 5 ; faisecho "bonjour tout le monde"
Fini
Et si nous devons travailler avec le contenu d'un répertoire? Dans l'exemple suivant, le script imprimera tous les fichiers du répertoire /usr/bin.
pour i dans /usr/bin/*; faisécho $i
Fini
Maintenant, que faisons-nous pour avoir une boucle for imbriquée? C'est juste une boucle for dans une autre. Voici une boucle for imbriquée utilisant l'exemple précédent.
pour ((i = 0 ; je < 3 ; i++)); dopour((j = 0 ; j < 2 ; j++)); do
echo "bonjour tout le monde"
Fini
Fini
La sortie sera "hello world" 6 fois. La boucle extérieure s'exécutera trois fois, la boucle intérieure s'exécutera deux fois.
Alors que les boucles
La boucle while est une autre boucle populaire et intuitive disponible dans les scripts bash. La syntaxe ressemble à ceci.
tandis que# quelque chose
Fini
Dans l'exemple suivant, le script imprimera "hello world" cinq fois.
nombre=1while [ $num -le 5 ]; fais
echo "bonjour tout le monde"
nombre=$(($num+1))
Fini
À quoi ressemblerait une boucle while imbriquée? Voici un exemple simple.
num_a=1nombre_b=1
while [ $num_a -le 5 ]; fais
while [ $num_b -le 5 ]; fais
echo "bonjour tout le monde"
num_b=$(($num_b+1))
Fini
num_a=$(($num_a+1))
Fini
Jusqu'aux boucles
Si vous avez une formation en programmation en C/C++, alors vous êtes familier avec la boucle do-while. Malheureusement, bash n'a rien de tel. Cependant, jusqu'à ce que la boucle fonctionne de manière similaire. La syntaxe est également assez similaire.
jusqu'à ce que [# quelque chose
Fini
La différence entre le moment et le moment où la boucle est la condition de test. Tant que la condition de test est vraie, une boucle while continuera à s'exécuter. Une boucle until, cependant, ne continuera à s'exécuter que si la condition est fausse.
Voici un exemple rapide de la boucle while. Il imprimera la table de multiplication de 2.
num_a=1jusqu'à [ $num_a -gt 10 ] ; fais
echo $(($num_a * 2))
num_a=$(($num_a+1))
Fini
Rupture de boucle
Dans certaines situations, si certaines conditions sont remplies, l'exécution du reste de la boucle devient redondante. Les ruptures de boucle sont une fonctionnalité intéressante qui permet de sortir de la boucle à une condition donnée. C'est plus important pour les boucles imbriquées car plus les boucles sont hautes, plus la consommation de ressources et l'inefficacité sont importantes.
Ici, la boucle for suivante cessera de s'exécuter dès qu'elle atteint la condition.
pour ((i=1;i<=100;i++)); doécho $i
si [ $i -eq 10 ]; ensuite
Pause
Fi
Fini
Découvrez comment rompre la boucle pour une explication détaillée et une démonstration des ruptures de boucle.
Dernières pensées
Une boucle imbriquée est un concept simple et puissant à comprendre et à mettre en œuvre. Espérons que ce guide a pu décrire et démontrer le concept.
Intéressé par plus de guides de script bash? Consultez les guides suivants.
Bon calcul!