Ceci est un article de continuation dans la boucle bash dans lequel l'article précédent que nous avons expliqué à propos de la boucle for . Dans cet article, nous examinerons deux autres boucles bash, à savoir while
et until
boucle.
Le while
La boucle est principalement utilisée lorsque vous devez lire le contenu du fichier et le traiter ultérieurement. La lecture et l'écriture dans un fichier sont des opérations courantes lorsque vous écrivez des scripts bash. Nous allons voir comment lire des fichiers avec un while
boucle.
Nous avons déjà un article très détaillé sur la façon d'écrire dans un fichier en utilisant les opérateurs de redirection.
- La redirection bash expliquée avec des exemples
La fonctionnalité du while
la boucle est similaire à for
boucle. Le for
boucle itère sur une liste d'éléments et exécute le bloc de code N un certain nombre de fois. Ici dans le while
boucle, la condition est évaluée en premier, et si la condition est vraie, le bloc de code sera exécuté jusqu'à ce que la condition soit évaluée comme fausse.
1. Boucle While
Ci-dessous le while
syntaxe de boucle. La boucle commence par le "while" mot-clé suivi d'une condition qui doit être évaluée comme vraie. Entre do
et done
le bloc est l'endroit où seront placés vos codes qui seront itérés N fois.
tandis que [[ condition ]]do Commande 1 Commande 2 .... Commande 3done
EXEMPLE 1 - Évaluer et itérer
Jetez un oeil à l'exemple ci-dessous. Ici j'ai créé une variable "NUM=5"
et mon état ($NUM -ne 0
) est, la boucle s'exécutera si la variable NUM
n'est pas égal à zéro.
$ NUM=5while [[ $NUM -ne 0 ]]do printf "Valeur de NUM =$NUM \n" ((--NUM))done
Vous devez utiliser des compteurs pour incrémenter ou décrémenter les valeurs stockées dans les variables lorsque vous travaillez avec while
boucles. Sinon, cela deviendra une boucle infinie et NUM
sera toujours fixé à cinq. Ici, je décrémente la valeur de NUM
à chaque itération en exécutant ((--NUM))
, donc quand ma variable NUM
est mis à zéro, la boucle sort.
((++NUM)) → Incrémente la variable NUM de 1, similaire à l'exécution de NUM=$(( $NUM + 1 ))((--NUM)) → Décrémente la variable NUM de 1, similaire à l'exécution de NUM=$(( $NUM - 1 ))
EXEMPLE 2 - Boucles infinies
Une boucle infinie est l'endroit où votre condition est toujours évaluée comme vraie et la boucle ne se terminera jamais.
Pour créer des boucles infinies, vous pouvez utiliser le bash-builtin true
mot-clé. Utilisez également le "sleep"
lors du test de boucles infinies, ce qui vous donnera le contrôle de l'arrêt du script, sinon votre écran sera inondé de sorties à défilement rapide.
$ NUM=0while truedo printf "Valeur de NUM =$NUM \n" ((++NUM)) sleep 2done
EXEMPLE 3 - Séparateur de champ interne (IFS)
IFS est une variable shell spéciale qui décide de la manière dont vos limites de mots sont gérées. Par défaut, IFS est défini sur un espace, une tabulation et un caractère de saut de ligne. Ouvrez le terminal et exécutez les commandes suivantes :
$ var1="foo:bar foo bar"
$ pour val dans $var1do echo $valdone
Jetez un oeil à la sortie. Le for
loop itère sur une chaîne et c'est IFS qui décide des limites des mots et considère l'espace comme un séparateur de champs.
Maintenant, exécutez à nouveau le code ci-dessous. Ici, IFS est défini sur les deux-points .
$ var1="foo:bar foo bar"
$IFS=":"
$ pour val dans $var1do echo $valdone
À partir de la sortie ci-dessus, vous pouvez voir que les deux-points du séparateur de champ personnalisé sont utilisés comme limite de mot. Vous pouvez remettre l'IFS à l'état par défaut en exécutant le unset
commande.
$ IFS non défini
EXEMPLE 4 - Lire un fichier à l'aide de la boucle while
Le while
loop est recommandé lorsque vous souhaitez lire un fichier ligne par ligne et le traiter.
Créez un nouveau fichier appelé test.txt
en utilisant le contenu suivant. Il y a une ligne vide après la ligne 2 pour montrer le comportement de la gestion des lignes vides.
14h00 Brighton contre Leicester14h00 West Ham contre Man Utd16h30 Spurs contre Chelsea
Nous utiliserons le read
commande qui accepte l'entrée de la redirection et la stocke dans une variable avec un opérateur de redirection d'entrée où le nom du fichier sera redirigé vers le while
boucle. Le read
utilisera l'IFS par défaut pour définir la limite de division du mot.
$ while read linedo echo $linedoneDans l'exemple ci-dessus,
test.txt
le fichier est redirigé vers lewhile
boucler etread
la commande lit ligne par ligne et la stocke dans la variable "line" et il est ensuite traité dans la boucle. Les lignes vides ne sont pas ignorées lorsque vous suivez cette méthode et ce n'est pas le comportement que vous pourriez souhaiter. Vous devez donc explicitement créer des lignes vides à ignorer.Il existe plusieurs options pour supprimer les lignes vides du fichier d'entrée. Vous pouvez utiliser
sed
,awk
, et les instructions conditionnelles, etc. Je préfère utiliser à la foisawk
etsed
pour nettoyer les lignes vides avant de les boucler en utilisant unwhile
boucle.# USING SED$ sed -i '/^[[:space:]]*$/d' test.txt14:00 Brighton v Leicester14:00 West Ham v Man Utd16:30 Spurs v Chelsea# UTILISER AWK$ awk 'NF' test.txtComme vu dans les exemples précédents, vous pouvez modifier IFS en fonction de la manière dont vous souhaitez lire votre fichier. Par exemple, si vous manipulez un fichier CSV, le délimiteur peut être défini sur une virgule. J'ai modifié le même fichier d'entrée pour qu'il soit au format CSV.
14:00,Brighton,Leicester14:00,West Ham,Man Utd16:30,Spurs,ChelseaDans l'exemple ci-dessous, IFS est défini sur une virgule (
IFS=","
) et chaque champ sera stocké dans une variable distincte (heure, équipe1, équipe2).tandis que IFS="," lire heure équipe1 équipe2 do echo "$team1 joue contre $team2 à $time"doneEXEMPLE 5 - Contrôle de flux de boucle avec Break and Continue
Si vous avez lu notre article bash for loop, vous savez peut-être ce qu'est break et continuer utilisé pour. break et continue sont des mots-clés intégrés bash qui vous aideront à contrôler le flux de votre boucle.
Le mot-clé "break" sortira complètement de la boucle et passera le contrôle à la commande suivante du script. Dans l'exemple ci-dessous. Lorsque le
NUM
est égal à trois, la boucle sera sortie par lebreak
commande.$ NUM=5while [[ $NUM -ne 0 ]]do printf "Valeur de NUM =$NUM \n" if [[ $NUM -eq 3 ]] then break fi ((--NUM))doneLe mot-clé "continue" ignorera l'itération en cours et redonnera le contrôle à la boucle while et commencera l'itération suivante.
$ NUM=0while [[ $NUM -lt 5 ]]do ((++NUM)) if [[ $NUM -eq 3 ]] then continue fi printf "Valeur de NUM =$NUM \n" done2. Jusqu'à la boucle
Le
until
boucle est l'exact opposé duwhile
boucle. Lewhile
loop évalue la condition comme étant vraie pour exécuter le bloc de code et leuntil
loop évalue la condition comme étant fausse pour que la boucle soit exécutée.La syntaxe est la même que le
while
boucle mais à la place du mot-cléwhile
,until
sera utilisé.jusqu'à ce que [[ condition ]]do Commande 1 Commande 2 .... Commande 3doneDans l'exemple ci-dessous, vous pouvez voir
until
la boucle évalue la variableNUM
être supérieur ou égal à cinq. C'est faux puisqueNUM
est mis à zéro et s'incrémentera dans les itérations suivantes en utilisant((++NUM))
. Ainsi, lorsqueNUM
est égal à cinq, la condition est évaluée comme vraie etuntil
la boucle cessera de s'exécuter.NUM $=0$ jusqu'à [[ $NUM -ge 5 ]]faire echo $NUM ((++NUM))donePour créer des boucles infinies, vous pouvez utiliser le mot clé "false" .
NUM $=0$ jusqu'à ce que falsedo echo $NUM ((++NUM))donePour contrôler le flux de la boucle, vous pouvez utiliser le
break
etcontinue
des mots-clés comme indiqué dans lewhile
section de boucle ci-dessus.Conclusion
Dans cet article, nous avons vu comment utiliser
while
boucle etuntil
boucle dans les scripts bash.Until
la boucle est la moins fréquemment utilisée par rapport àfor
etwhile
boucles, mais c'est pour décider de votre script et des types de boucle requis. Soyez à l'aise dans l'utilisation des trois boucles.Si vous avez des questions ou des commentaires, n'hésitez pas à nous le faire savoir via la section des commentaires ci-dessous.
Lire connexe :
- Scripts bash – Fonctions expliquées à l'aide d'exemples
- Scripts bash – Variables expliquées à l'aide d'exemples
- La commande Bash Echo expliquée avec des exemples sous Linux
- Tutoriel Bash Heredoc pour les débutants
- Comment répéter une commande jusqu'à ce qu'elle réussisse sous Linux
- Différence entre la définition de variables bash avec et sans exportation