Question 1Que parcourt for f in *.txt; do ... done ?
Boucles — traiter les fichiers un par un avec for
Cet article fait partie du Cours Linux, qui vous permet de maîtriser à partir de zéro des compétences Linux concrètes, des commandes de base jusqu'aux scripts shell.
Parcours une liste de fichiers avec for f in *.txt, répète sous condition avec while [ "$i" -le 3 ] et until, saute les valeurs vides avec continue et arrête à une limite avec break — illustré et pratiqué dans un terminal en navigateur.
Traiter une liste dans l'ordre — for
for prend les valeurs que tu lui donnes une à une et exécute le même travail sur chacune.
La forme est for v in a b c; do ... done, où v devient a, puis b, puis c tour à tour.
Ce qui se trouve entre do et done est le corps qui se répète.
Tu peux lister les valeurs directement, utiliser un motif de fichiers comme *.txt, ou injecter la sortie de $(...) d'une commande.
Écris for f in *.txt et chaque fichier .txt du répertoire courant passe dans f tour à tour, ce qui te permet d'écrire un traitement par fichier.
Utiliser $(...) comme dans for line in $(cat list.txt) te laisse parcourir la sortie d'une commande.
C'est ainsi que tu écris des synthèses sur une liste de fichiers ou un traitement par lot sur plusieurs fichiers.
for env in dev stg prod; do # traite les valeurs listées tour à tour
echo "deploying to $env"
done
for f in *.sh; do # traite les fichiers .sh tour à tour
echo "script: $f"
done
for tire les éléments de la liste dans f un à un et exécute le corps, puis se termine à done une fois les éléments épuisés.| Syntaxe | Sens | Exemple |
|---|---|---|
for v in a b c; do … done | traite les valeurs listées tour à tour | for v in dev stg prod; do echo $v; done |
for f in *.txt; do … | traite les fichiers correspondants tour à tour | for f in *.txt; do wc -l "$f"; done |
for x in $(cmd); do … | traite la sortie d'une commande tour à tour | for d in $(ls); do echo $d; done |
do … done | début et fin du corps de la boucle | for v in a b; do echo $v; done |
Répéter sur une condition — while / until
while répète tant que la condition est vraie.
Comme dans while [ "$i" -lt 3 ]; do ... done, tu incrémentes un compteur dans le corps pour avancer vers la fin.
until fait l'inverse — il répète jusqu'à ce que la condition devienne vraie.
Il convient au travail dont le nombre de tours n'est pas fixé à l'avance.
i=1
while [ "$i" -le 3 ]; do # répète tant que i vaut 3 ou moins
echo "try $i"
i=$((i + 1))
done # try 1 / try 2 / try 3
i=1
until [ "$i" -gt 3 ]; do # répète jusqu'à ce que la condition devienne vraie
echo "i=$i"
i=$((i + 1))
done # i=1 / i=2 / i=3
while répète le corps tant que la condition est vraie ; until le répète jusqu'à ce que la condition devienne vraie. Tous deux font avancer un compteur dans le corps pour aller vers la fin.| Syntaxe | Sens | Exemple |
|---|---|---|
while [ cond ]; do … done | répète tant que la condition est vraie | while [ "$i" -lt 3 ]; do …; done |
until [ cond ]; do … done | répète jusqu'à ce que la condition devienne vraie | until [ -f done.flag ]; do …; done |
Contrôler une boucle for — break / continue
Même en plein milieu d'une boucle for, tu peux changer le flux avec break et continue.
continue saute le reste de ce tour et passe à l'élément suivant, tandis que break met fin à la boucle elle-même.
Combine-les avec une condition comme dans if [ condition ]; then continue; fi ou if [ condition ]; then break; fi pour sauter les éléments dont tu n'as pas besoin ou arrêter une fois que tu en as assez.
for n in 1 2 3 4 5; do
if [ "$n" -eq 3 ]; then continue; fi # saute 3
if [ "$n" -eq 5 ]; then break; fi # sort à 5
echo "n=$n"
done # n=1 / n=2 / n=4
for exécute le corps dans l'ordre à partir de n=1. À n=3, le continue saute le reste et passe à la suite, et à n=5, le break met fin à la boucle elle-même (sortie n=1 / n=2 / n=4).| Syntaxe | Sens | Exemple |
|---|---|---|
continue | saute ce tour et passe au suivant | if [ -z "$x" ]; then continue; fi |
break | sort de la boucle en cours de route | if [ "$n" -gt 100 ]; then break; fi |
Contrôler une boucle while — break / continue
En plus de la vérification de condition dans while, utiliser break et continue te permet d'arrêter tôt ou de sauter un tour.
continue saute ce tour et revient à la vérification de condition, tandis que break sort de la boucle sans attendre la condition.
Attention ici : si tu ne places pas la mise à jour du compteur en tête du corps (avant continue), le tour sauté ne la mettra pas à jour et la boucle ne finira jamais.
i=0
while [ "$i" -lt 10 ]; do
i=$((i + 1)) # avance en tête
if [ "$i" -eq 3 ]; then continue; fi # saute le 3e tour
if [ "$i" -eq 6 ]; then break; fi # sort au 6e tour
echo "attempt $i"
done # attempt 1 / 2 / 4 / 5
while exécute le corps tant que la condition est vraie, en faisant avancer i de 1 à chaque fois. À i=3, le continue revient à la vérification de condition, et à i=6, le break met fin à la boucle sans attendre la condition (sortie attempt 1 / 2 / 4 / 5).| Syntaxe | Sens | Exemple |
|---|---|---|
continue | saute ce tour, retour au test | if [ $((i % 3)) -eq 0 ]; then continue; fi |
break | sort de la boucle sans attendre la condition | if [ "$found" -ge 4 ]; then break; fi |
| où mettre à jour le compteur | mets-le à jour avant continue | place i=$((i + 1)) en tête du corps |
Vérification des connaissances
Répondez à chaque question une par une.
Question 2Quel mot-clé répète tant que la condition est vraie ?
Question 3Lequel saute seulement ce tour et passe au suivant ?