Programmation Bash/Boucles

Un livre de Wikilivres.

Boucle for[modifier | modifier le wikicode]

Syntaxe foreach[modifier | modifier le wikicode]

La boucle for permet de parcourir une liste de valeurs, elle effectue donc un nombre de tours de boucle qui est connu à l'avance.

for variable in liste_valeurs
    do instruction(s)
done

Liste définie[modifier | modifier le wikicode]

Cet exemple est une commande qui lance une sous-commande en paramètre 1 dans plusieurs conteneurs :

CMD=$1
for app in {"app1","app2","app3"}; do
  echo $app; docker-compose exec $app sh -c "$CMD"; echo ""
done

Liste de fichiers[modifier | modifier le wikicode]

Exemple pour programmer un clone de la fonction ls :

for i in *
do
 echo $i
done

Dans cet exemple, l'étoile est remplacée par tous les fichiers du répertoire courant, la boucle for va donc donner successivement comme valeur à la variable i tous ces noms de fichier. Le corps de la boucle affichant la valeur de la variable i, le nom de tous les fichiers du répertoire courant sont affichés successivement.

Liste d'arguments[modifier | modifier le wikicode]

La boucle for est très souvent utilisée dans un script pour parcourir la liste des arguments fournie au script. Par exemple :

for i in "$@"
do
 echo "$i"
done

liste tous les arguments transmis au script.

Liste séquentielle[modifier | modifier le wikicode]

Il est souvent utile de pouvoir effectuer une boucle sur une liste de valeurs, pour cela on utilise la fonction seq. Cette fonction prend en arguments deux entiers et renvoie la liste de tous les entiers compris entre ces bornes.

$ seq 1 4
1
2
3
4

Utilisée conjointement avec la boucle for, la commande seq permet donc d'avoir un compteur de boucle :

$ for i in `seq 1 4`; do echo "tour de boucle $i"; done
tour de boucle 1
tour de boucle 2
tour de boucle 3
tour de boucle 4

Seconde syntaxe[modifier | modifier le wikicode]

La boucle for possède une deuxième syntaxe :

for ((e1;e2;e3))
    do instruction(s)
done

Dans laquelle, e1, e2 et e3 sont des expressions arithmétiques. Une telle boucle commence par exécuter l'expression e1, puis tant que l'expression e2 est différente de zéro le bloc d'instructions est exécuté et l'expression e3 évaluée.

for ((i=0 ; 10 - $i ; i++))
    do echo $i
done

Boucles until et while[modifier | modifier le wikicode]

La boucle while exécute un bloc d'instructions tant qu'une certaine condition est satisfaite, lorsque cette condition devient fausse la boucle se termine. Cette boucle permet donc de faire un nombre indéterminé de tours de boucle, voire infini si la condition ne devient jamais fausse.

while condition
    do instruction(s)
done
#! /bin/bash

a_trouver=$((($RANDOM % 100) + 1))

let "b = 1"
let "h = 100"

read -p "entrez un nombre compris entre 1 et 100 : " i
while [ "$i" -ne "$a_trouver" ]; do
        if [ "$i" -lt "$a_trouver" ]; then
                let "b = $i"
                adj="Trop petit"
        else
                let "h = $i"
                adj="Trop grand"
        fi
        read -p "$adj, entrez un nombre compris entre ${b} et ${h} : " i
done
echo "Bravo, le nombre etait en effet $a_trouver"

La syntaxe de la boucle until est exactement la même que celle de la boucle while, mais sa signification est inversée : la boucle est exécutée tant que la condition est fausse.