Nous utilisons des cookies pour améliorer votre expérience. En poursuivant votre navigation sur ce site, vous acceptez l'utilisation de cookies.


Politique de confidentialité

Les boucles dans les scripts shell

 

Les boucles dans les scripts shell

L'itération à travers une série de commandes est une pratique de programmation courante. Souvent, vous devez répéter un ensemble de commandes jusqu'à ce qu'une condition spécifique soit remplie, telle que le traitement de tous les fichiers d'un répertoire, de tous les utilisateurs d'un système ou de toutes les lignes d'un fichier texte.

Le shell Bash fournit trois structures pour contrôler les boucles : for, while et until. Elles ont chacune une valeur pour l'itération à travers les commandes.

Boucle for

L'interpréteur de commandes Bash fournit la commande for pour vous permettre de créer une boucle qui itère dans une série de valeurs. Chaque itération exécute un ensemble prédéfini de commandes en utilisant l'une des valeurs de la série. Voici le format de base de la commande for du shell Bash.

for var in liste
do
    commandes
done

Vous devez spécifier la série de valeurs utilisées dans les itérations dans le paramètre liste. Les valeurs peuvent être spécifiées de plusieurs manières.

A chaque itération, la variable var contient la valeur courante dans la liste. La première itération utilise le premier élément de la liste, la deuxième itération utilise le deuxième élément, et ainsi de suite, jusqu'à ce que tous les éléments de la liste aient été utilisés.

Les commandes entrées entre les instructions do et done peuvent être une ou plusieurs commandes shell Bash standard. Dans les commandes, la variable $var contient la valeur actuelle de l'élément de liste pour l'itération.

L'utilisation la plus basique de la commande for consiste à parcourir une liste de valeurs définies dans la commande for elle-même :

#!/bin/bash

for var in Meknes Fes Paris Lille Lyon Rabat
do
    echo "Valeur actuelle de var est : $var"
done

exit 0
devinfo@ubuntu:~/scripts$ boucle.sh
Valeur actuelle de var est : Meknes
Valeur actuelle de var est : Fes
Valeur actuelle de var est : Paris
Valeur actuelle de var est : Lille
Valeur actuelle de var est : Lyon
Valeur actuelle de var est : Rabat

Pour les grandes séries de chiffres dans vos boucles for, il est pratique d'utiliser la commande seq, au lieu de taper tous les chiffres. Il suffit d'entrer seq suivi du nombre de départ puis du dernier nombre de la série, mais vous devrez utiliser la substitution de commande pour que cela fonctionne correctement :

#!/bin/bash

for var in $(seq 1 5)
do
    echo "Valeur actuelle de var est : $var"
done

exit 0
evinfo@ubuntu:~/scripts$ boucle.sh
Valeur actuelle de var est : 1
Valeur actuelle de var est : 2
Valeur actuelle de var est : 3
Valeur actuelle de var est : 4
Valeur actuelle de var est : 5

La substitution de commandes dans la liste vous permet de faire beaucoup de choses avec vos boucles for :

#!/bin/bash

for var in $(ls *.sh)
do
    echo "Fichier actuel : $var"
done

exit 0
devinfo@ubuntu:~/scripts$ boucle.sh
Fichier actuel : boucle.sh
Fichier actuel : case.sh
Fichier actuel : hello.sh
Fichier actuel : structure.sh
Fichier actuel : trouver.sh
Fichier actuel : vars.sh
#!/bin/bash

for var in $(cat villes)
do
    echo "Ligne actuelle : $var"
done

exit 0
devinfo@ubuntu:~/scripts$ cat villes
Meknes
Fes
Paris
Lille
Lyon
Rabat
devinfo@ubuntu:~/scripts$ boucle.sh
Ligne actuelle : Meknes
Ligne actuelle : Fes
Ligne actuelle : Paris
Ligne actuelle : Lille
Ligne actuelle : Lyon
Ligne actuelle : Rabat
Boucle while

La commande while se situe quelque peu entre l'instruction if-then et la boucle for. La commande while vous permet de définir une condition (ou commande) à tester, puis de boucler un ensemble de commandes tant que la condition de test définie renvoie une valeur de sortie nulle (true). Elle teste la condition de test au début de chaque itération. Lorsque la condition de test renvoie une valeur de sortie nulle, la commande while arrête d'exécuter l'ensemble des commandes.

Voici la syntaxe de la commande while :

while [ condition ]
do
    commandes
done

La condition définie dans la commande while a le même format que dans les instructions if-then. Comme dans l'instruction if-then, vous pouvez utiliser n'importe quelle commande normale de l'interpréteur de commandes Bash, ou vous pouvez utiliser la condition pour tester des conditions, telles que des valeurs de variables.

La clé de la commande while est que l'état de sortie de la condition spécifiée doit changer, en fonction des commandes exécutées pendant la boucle. Si l'état de sortie ne change jamais, la boucle while restera bloquée dans une boucle infinie.

#!/bin/bash

a=20

while [ $a -gt 0 ]
do
    echo "a = $a"
    a=$[ $a - 3 ]
done

exit
devinfo@ubuntu:~/scripts$ boucle.sh
a = 20
a = 17
a = 14
a = 11
a = 8
a = 5
a = 2
Boucle until

La commande until fonctionne exactement à l'inverse de la commande while. La commande until exige que vous spécifiiez une condition de test qui produit normalement une valeur de sortie non nulle (fausse). Tant que l'état de sortie de la condition de test est une valeur de sortie non nulle, le shell Bash exécute les commandes énumérées dans la boucle. Lorsque la condition de test renvoie une valeur de sortie nulle (vraie), la boucle s'arrête.

La syntaxe de la commande until est la suivante :

until [ condition ]
do
   Commandes
done

Seul l'état de sortie de la dernière commande détermine si le shell Bash exécute les autres commandes définies. Voici un exemple d'utilisation de la commande until :

#!/bin/bash

a=20

until [ $a -lt 0 ]
do
    echo "a = $a"
    a=$[ $a - 3 ]
done

exit
devinfo@ubuntu:~/scripts$ boucle.sh
a = 20
a = 17
a = 14
a = 11
a = 8
a = 5
a = 2

Partager ce cours avec tes amis :
Rédigé par ESSADDOUKI Mostafa
ESSADDOUKI
The education of the 21st century opens up opportunities to not merely teach, but to coach, mentor, nurture and inspire.