Boucle Bash 'Until' : Tutoriel et exemples

Utilisation de la boucle 'until' dans un script Bash pour boucler sur la ou 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 en boucle pour répéter plusieurs fois des tâches similaires. Dans cet article, nous allons apprendre à utiliser le jusqu'à boucle dans Bash.

introduction

le jusqu'à 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 continue d'échouer (c'est-à-dire qu'elle renvoie un état différent de zéro. Toute commande sous Linux renvoie 0 en cas de succès et un entier différent de zéro en cas d'échec). C'est exactement le contraire de tandis que boucle, dans laquelle les commandes exécutées continuent de s'exécuter jusqu'à ce que la commande de condition réussisse.

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écutera jusqu'à ce que la dernière commande de la liste continue d'échouer.

Syntaxe générale

La syntaxe générale pour jusqu'à boucle dans Bash est :

jusqu'à ce que ce soit fait

La liste des commandes d'exécution s'exécutera jusqu'à ce que la dernière commande de la liste des commandes de condition échoue. Une fois la dernière commande réussie, la boucle se termine.

Les utilisateurs peuvent 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 est de 10.

x=0 jusqu'à ce que [[ $x -eq 10 ]] fasse 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).

Puis à l'intérieur du Faire bloc, nous imprimons simplement la valeur de x et l'incrémentons. La boucle se termine une fois la commande de condition réussie, c'est-à-dire lorsque x $ est égal à 10.

Noter: La variable d'index à utiliser dans la boucle "until" est à initialiser soit avant la boucle "until" soit dans les commandes de condition, contrairement à la boucle for qui permet d'initialiser une variable de manière implicite.

Avec plusieurs commandes de condition : La boucle suivante crée 5 répertoires nommés dir0, dir1, ... dir4.

z=0 jusqu'à ce que echo "Salut" echo "Au revoir" [[ $z -eq 5 ]] do echo "Création dir$z..." mkdir dir$z ((z++)) done

Les premières commandes echo "Hi" et echo "Bye" s'exécuteront 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 cette commande continue d'échouer, c'est-à-dire jusqu'à ce que la valeur de z soit 5, 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 les 2 commandes d'écho en condition puis la 3ème commande de condition vérifie 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 une instruction, pour une sortie conditionnelle de la boucle.

x=0 jusqu'à ce que [[ $x -eq 10 ]] do if [[ $x -eq 5 ]] break fi echo $x ((x++)) done

La boucle jusqu'à 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 pour ignorer la partie restante d'une itération dans une boucle si une condition particulière est satisfaite.

x=0 jusqu'à ce que [[ $x -eq 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 jusqu'à 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 jusqu'à boucle est une autre fonctionnalité importante dans les scripts Bash. Cela a une importance particulière dans les scripts complexes lorsqu'un certain ensemble de programmes est censé renvoyer un état d'échec et qu'une ou plusieurs autres commandes doivent être exécutées pour enregistrer l'échec, afficher l'erreur en détail ou simplement exécuter d'autres programmes.