Utilisation de la boucle « while » dans les scripts Bash pour itérer sur les commandes.
Bash (Bourne Again Shell) est une invite de commande shell et un langage de script dans les systèmes d'exploitation GNU/Linux. C'est le shell par défaut pour la plupart des distributions Linux.
Comme la plupart des langages de script, Bash fournit des syntaxes de boucle pour répéter une tâche similaire plusieurs fois. Dans cet article, nous allons apprendre à utiliser le tandis que
boucle dans Bash.
introduction
le tandis que
la boucle dans Bash est utilisée pour exécuter des commandes (commandes exécutées) plusieurs fois en fonction de la sortie d'autres commandes (commandes de condition). Les commandes exécutées continueront à s'exécuter jusqu'à ce que la commande de condition s'exécute avec succès (c'est-à-dire qu'elle renvoie un état 0. Toute commande sous Linux renvoie 0 pour le succès et un entier différent de zéro pour l'échec).
S'il existe plusieurs commandes de condition, l'instruction ne considère que l'état de la dernière commande de la liste, c'est-à-dire que la boucle s'exécute jusqu'à ce que la dernière commande de la liste s'exécute avec succès.
Syntaxe générale
La syntaxe générale pour tandis que
boucle dans Bash est :
pendant que fait
La liste des commandes d'exécution continuera à s'exécuter jusqu'à ce que la dernière commande de la liste des commandes de condition s'exécute avec succès et se termine avec l'état 0. Dans l'itération, lorsque la dernière commande de condition échoue, la boucle se termine.
L'utilisateur peut spécifier n'importe quel fichier exécutable dans les listes de commandes. Il peut s'agir de programmes Linux standard ou de programmes utilisateur ou de scripts personnalisés. Chaque commande doit être soit sur une nouvelle ligne, soit séparée par un point-virgule sur la même ligne.
Voyons quelques exemples.
Boucle jusqu'à ce qu'une variable ait une valeur particulière : La boucle suivante s'exécute jusqu'à la valeur de la variable X
n'est pas égal à 10.
x=0 tandis que [[ $x -ne 10 ]] do echo $x ((x++)) done
À chaque itération, nous vérifions si la valeur de x est 10. La valeur est vérifiée en utilisant le test
commander. [[ Expression ]]
est la syntaxe de la commande test (voir test de l'homme
). Ici, puisque nous utilisons le -ne
(qui signifie « pas égal à »), la commande de test renvoie 0, c'est-à-dire un succès, si la valeur de x n'est pas 10, et elle renvoie une valeur non nulle, c'est-à-dire un échec si la valeur de x est 10.
Puis à l'intérieur du Faire
bloc, nous imprimons la valeur de x et l'incrémentons. Une fois que la valeur de x est 10, la commande de test renvoie un état différent de zéro et la boucle se termine.
Noter: La variable d'index à utiliser dans la boucle while doit être initialisée soit avant la boucle while, soit dans les commandes de condition, contrairement à la boucle for, qui permet d'initialiser une variable implicitement.
Avec plusieurs commandes de condition : La boucle suivante crée 5 répertoires nommés dir0, dir1, ... dir4
.
z=0 while echo "Liste des fichiers :" ls -l [[ $z -ne 5 ]] do echo "Création dir$z..." mkdir dir$z ((z++)) done
Premières commandes echo "Liste des fichiers :"
et ls -l
s'exécutera une fois complètement ; leur succès ou leur échec n'a aucun impact sur la durée de la boucle.
Ensuite, la commande de test pour vérifier la valeur de la variable z s'exécutera. Jusqu'à ce que la valeur de z ne soit pas 5, la commande de test renvoie l'état de réussite et, par conséquent, la boucle continue de s'exécuter. Les commandes de condition et les commandes exécutées continuent de s'exécuter dans l'ordre. Ici, pour chaque itération, il exécutera d'abord la commande echo et la commande ls en condition, puis la commande 3ème condition vérifiera la valeur de z. S'il n'est pas 5, il entre dans la boucle et exécute les commandes données.
Pause et continue
Instruction Break pour la sortie conditionnelle
On peut aussi utiliser l'instruction conditionnelle si
à l'intérieur de la boucle. le si
l'instruction peut être utilisée avec un Pause
instruction, pour une sortie conditionnelle de la boucle.
x=0 while [[ $x -ne 10 ]] do if [[ $x -eq 5 ]] break fi echo $x ((x++)) done
La boucle while ci-dessus imprimera des nombres de 0 à 4. Ensuite, lorsque la valeur de i est 5, elle sortira de la boucle. Ceci est particulièrement utile lorsqu'une boucle doit être terminée lorsqu'une commande donne une sortie spécifique.
Continuer l'instruction pour sauter une itération sous condition
Bash dispose également d'un Continuez
instruction, pour ignorer la partie restante d'une itération dans une boucle si une condition particulière est satisfaite.
x=0 while [[ $x -ne 10 ]] do if [[ $x -eq 5 ]] continue fi echo $x ((x++)) done
La boucle ci-dessus imprimera des nombres de 0 à 10, sauf 5, car lors de l'itération de x=5
il y a une instruction continue, qui sautera le reste du code dans la boucle au début avec l'itération de x=6
.
Utilisation des boucles : scripts et ligne de commande
Les syntaxes de boucle peuvent être utilisées directement dans le shell Bash ou à partir d'un fichier de script shell exécutable. Semblable à pour
et tandis que
boucles, une fois par tandis que
la syntaxe de boucle est entrée sur le shell, le shell continue l'invite pour permettre à l'utilisateur de continuer les commandes à boucler.
Ou bien l'utilisateur peut enregistrer cela dans un fichier de script et exécuter le fichier de script.
le #!/bin/bash
au début spécifie l'interpréteur à utiliser lors de l'exécution du fichier. Bien que Bash soit le shell le plus couramment utilisé de nos jours, certains utilisateurs préfèrent des shells comme zsh
, qui doit être spécifié à la place de bash au début de ce fichier.
Pour donner des autorisations d'exécution pour ce fichier, exécutez :
chmod +x test.sh
Enfin, pour exécuter le fichier, Cours:
./test.sh
Conclusion
le tandis que
boucle, semblable à pour
et jusqu'à
les boucles sont une fonctionnalité importante dans les scripts Bash. La boucle While a une utilisation similaire à la boucle Until, sauf qu'elle est utilisée pour exécuter des commandes/programmes alternatifs lorsqu'un programme particulier réussit. Cela trouve souvent son utilité dans les scripts de mise en réseau avancés, les scripts de maintenance du système, etc.