Comment faire une Boucle en Bash ?

Article publié le et mis à jour le .

Comment faire une Boucle en Bash ?

Le Bash est un langage capricieux qui a une syntaxe différente des langages comme Python ou JavaScript.

En plus, la plupart des développeurs n’utilisent que rarement le scripting Linux avec Bash.

C’est donc facile d’oublier la syntaxe exactes des boucles while ou for en bash pour ces raisons !

Dans cet article, on voit différents exemples de boucles dans le shell que vous utilisiez bash, zsh, csh, ksh ou une autre surcouche sh !

La boucle for i = 0; i < n; i++ en bash

Le style de boucle for qui est probablement le plus facile à retenir si vous venez d’un autre langage de programmation est les boucles for de “style C” (C-styled en anglais).

La syntaxe est un peu différente car on a des doubles parenthèses.

for (( i=0 ; i<=5 ; i++ ))
do
  echo "i = $i"
done

Ce qui donnera :

i = 0
i = 1
i = 2
i = 3
i = 4
i = 5

La boucle for i in range en bash

La boucle for i in range en bash

La boucle bash for i in range est similaire à la boucle for en Python avec la fonction native python range.

Par exemple, pour boucler de 0 à 5 (compris), on peut utiliser {0..5} :

for i in {0..5}
do
  echo "i = $i"
done

Ce qui donnera :

i = 0
i = 1
i = 2
i = 3
i = 4
i = 5

{start..end} permet de créer une séquence en bash sur laquelle on peut boucler.

La boucle for each en bash

La boucle for each en bash

La boucle for permet aussi de boucler sur un nombre indéfini d’éléments comme le contenu d’un tableau, d’un fichier ou de n’importe quel type de structure de données itérable.

Pour boucler sur un tableau en Bash, on peut utiliser une boucle for … in … comme celle-ci :

langages=("JavaScript" "Python" "Bash")
for langage in "${langages[@]}"
do
    echo "Langage : $langage"
done

Ce qui donnera :

Langage : JavaScript
Langage : Python
Langage : Bash

Les principales structures de données itérables sont :

  • Les listes : a b c
  • Les tableaux : ("a" "b" "c")
  • Les fichiers : /chemin/*
  • Les paramètres : "$@"

La boucle for sur une liste en bash

En bash, une liste est une série d’éléments souvent séparés par des espaces : a b c.

On peut boucler sur une liste en utilisant une boucle for :

for lettre in a b c
do
  echo "$lettre"
done

Ce qui donnera :

a
b
c

La boucle for en sautant de plusieurs pas

Depuis la version 4.0 de bash, on peut aussi sauter de plusieurs pas/steps dans une boucle for … in … De base, on incrémente de 1 à chaque passage dans la boucle, mais disons qu’on veuille incrémenter d’une autre valeur, on pourrait utiliser une séquence {start..end..step}.

Par exemple, pour boucler de 0 à 10 (inclus) en itérant de 2 pas à chaque fois :

for i in {0..10..2}
do
  echo "i = $i"
done

Ce qui donnera :

i = 0
i = 2
i = 4
i = 6
i = 8
i = 10

🐍 Les séquences fonctionnent de manière similaire à la fonction range() en Python, si vous voulez en apprendre plus sur cette fonction native, alors mon article sur la fonction range en Python vous intéressera sûrement.

La boucle while en bash

La boucle while en bash permet de boucler tant qu’une condition est vraie. Sa syntaxe est un peu différente des autres langage de programmation avec l’opérateur “less than” -lt, l’utilisation de crochets [] et l’incrémentation de la variable i=$((i + 1)).

i=0
while [ $i -lt 5 ]
do
  echo "$i"
  i=$((i + 1))
done
i = 0
i = 1
i = 2
i = 3
i = 4

La boucle until en bash

La boucle until en bash permet de boucler tant qu’une condition est fausse. C’est donc l’inverse d’une boucle while.

i=0
until [ $i -gt 5 ]
do
  echo "$i"
  i=$((i + 1))
done
i = 0
i = 1
i = 2
i = 3
i = 4
i = 5

La boucle select en bash

La boucle select en bash

La boucle select en bash est un peu différente d’une boucle traditionnelle dans le sens qu’elle est utilisée pour boucler sur des choix d’utilisateurs comme dans un menu par exemple. L’utilisateur pourra donc rester dans la boucle et choisir des options jusqu’à l’arrêt du script.

select choix in Commandes Aide Quitter
do
  case $choix in
    Commandes)
      echo "cd, ls, cp, mv, rm"
      ;;
    Aide)
      echo "Ce script affiche certaines des commandes shell les plus utilisées"
      ;;
    Quitter)
      break
      ;;
    *)
      echo "Option invalide"
      ;;
  esac
done
1) Commandes    2) Aide         3) Quitter
?# 0
Option invalide
?# 1
cd, ls, cp, mv, rm
?# 2
Ce script affiche certaines des commandes shell les plus utilisées
?# 3

Aller plus loin en scripting bash

Bravo 🎉 vous savez maintenant comment faire des boucles en bash !

Apprendre la base des outils de programmation et des langages comme bash vous permettra de gagner beaucoup de temps au quotidien.

Sur ce blog, je vous propose de nombreux tutoriels pour apprendre bash et le scripting en général.

Les articles suivants vous plairont sûrement si c’est quelque chose que vous voulez apprendre :