-
BASH > Les boucles
FOR
Première syntaxe
for VAR in LISTE ; do // instructions done
Exemple : Lister les fichiers TXT :
for i in *.txt ; do echo $i done
Exemple : Lister les retours d’une commande shell :
for i in $( ls ); do echo $i done
Exemple : Parcourir les arguments d’un script :
for i in "$@" ; do echo "$i" done
Exemple : Liste de valeurs :
for i in `seq 1 4` ; do echo "numéro $i" done
Deuxième syntaxe
for (( i=0 ; 50 - $i ; i++ )) ; do echo $i done
Tant que
50 - $in’est pas égal à zéro, la boucle incrémente i (i++)Saut d’itération
Pour sauter directement d’itération sans exécuter code2 :
for VAR in 1 2 3 4 5 ; do // code1 if (condition) ; then continue fi // code2 done
WHILE
La boucle
while
s’exécute tant que la condition est satisfaite.while condition ; do // OK done
exemple :
while [ "$VAR" -ne "$AUTRE" ] ; do echo "$VAR pas égal à $AUTRE" done
Plusieurs conditions
Du plus recommandé au moins recommandé :
while (( stats > 300 || stats == 0 ))while (( stats > 300 )) || (( stats == 0 ))while [[ $stats -gt 300 || $stats -eq 0 ]]while [[ $stats -gt 300 ]] || [[ $stats -eq 0 ]]while [ "$stats" -gt 300 ] || [ "$stats" -eq 0 ]while [ "$stats" -gt 300 -o "$stats" -eq 0 ]Lecture d’une sortie
Lire chaque ligne du résultat d’une commande :
while read -r LIGNE ; do echo "$LIGNE" done < <(grep toto fichier.txt)
Lire chaque ligne d’un fichier :
while read -r LIGNE ; do echo "$LIGNE" done < fichier
Quitter la boucle while : break
Quitter ou sortir de la boucle while :
breakwhile : ; do read -p "taper q pour quitter" a if [[ $a == "q" ]] ; then break fi echo "Vous avez tapé $a" done
Itérer l’élément suivant : continue
Aller à l’élément suivant de la boucle while sans continuer le code à l’intérieur de cette même boucle :
continuewhile [ condition ] ; do code 1 if (condition) ; then continue procède à l'élément suivant sans passer par code 2 fi code 2 done
Quelques exemples
demande de saisir 26 et continue tant que c’est faux :
VAR=0 while ((VAR!=26)) ; do echo -e "Saisir 26 : \c" read VAR done
affiche tant que VAR est inférieur à 15 :
VAR=0 while ((VAR<15)) ; do echo "VAR = $VAR" ((VAR++)) done
Boucle infinie
while : ; do echo "Boucle infinie" done
while true ; do echo "Boucle infinie" done
UNTIL
La boucle
untils’exécute jusqu’à ce que la condition soit satisfaiteuntil condition ; do // OK done
exemple :
until [ "$VAR" -ne "$AUTRE" ] ; do echo "$VAR est égal à $AUTRE" done
BOUCLE INFINIE
for (( ; ; )) ; do // code done
ou
while true ; do // code done
ou
while : ; do // code done
Pour sortir, il faut insérer un
breakSÉQUENCES
seq
seq 100→1 2 3 4 … 100seq -w 100→001 002 003 004 … 100seq 1 2 10→1 3 5 7 9{a…b}
echo {1..5}→1 2 3 4 5echo {0..10..2}→0 2 4 6 8 10