Boucles en bash

Les boucles en Bash : répéter sans sombrer

La boucle est l’un des piliers de la programmation. En Bash, elle permet de répéter des commandes automatiquement, sans avoir à se suicider en copiant/collant 50 fois la même ligne.

C’est un outil de puissance, d’élégance… et parfois, de souffrance. Mal utilisée, elle devient une boucle infinie. Bien utilisée, elle vous fait gagner des heures.

Mais c’est quoi une boucle ?

En informatique, une boucle est une structure qui permet de répéter un bloc de code tant qu’une condition est remplie, ou pour chaque élément d’un ensemble.

Les types de boucles en Bash

Bash offre trois principaux types de boucles :

  • for – pour parcourir une séquence (de nombres, de fichiers, de mots…)
  • while – tant qu’une condition est vraie
  • until – jusqu’à ce qu’une condition devienne vraie

La boucle for

1. Sur une liste fixe

#!/bin/bash
for fruit in pomme banane cerise; do
  echo "J'aime le fruit : $fruit"
done

2. Sur une séquence de nombres

#!/bin/bash
for i in {1..5}; do
  echo "Compteur : $i"
done

Avec un pas personnalisé :

for i in {0..10..2}; do
  echo "Pair : $i"
done

3. En style C (classique chez les informaticiens insomniaques)

#!/bin/bash
for ((i=0; i<5; i++)); do
  echo "i vaut $i"
done

4. Sur les fichiers d’un dossier

#!/bin/bash
for fichier in *.txt; do
  echo "Fichier trouvé : $fichier"
done

⚠️ Attention aux fichiers avec des espaces ou caractères spéciaux. Utilisez des guillemets : "$fichier".

La boucle while

1. Exemple classique : tant que compteur < 5

#!/bin/bash
compteur=0
while [ $compteur -lt 5 ]; do
  echo "Compteur : $compteur"
  ((compteur++))
done

2. Lire un fichier ligne par ligne

#!/bin/bash
while IFS= read -r ligne; do
  echo "Ligne : $ligne"
done < monfichier.txt

3. Boucle infinie (à vos risques et périls)

while true; do
  echo "Ctrl+C pour arrêter"
  sleep 1
done

La boucle until

until est l’inverse de while : le code tourne jusqu’à ce que la condition soit vraie.

#!/bin/bash
i=0
until [ $i -ge 5 ]; do
  echo "i = $i"
  ((i++))
done

Interrompre ou contrôler une boucle

  • break : sort immédiatement de la boucle
  • continue : saute à l’itération suivante
  • done

    #!/bin/bash
    for i in {1..5}; do
      if [ $i -eq 3 ]; then
        echo "Je saute $i"
        continue
      fi
      echo "i = $i"
    done
    

    Combiner boucle + condition

    #!/bin/bash
    for fichier in *; do
      if [ -d "$fichier" ]; then
        echo "$fichier est un dossier"
      elif [ -f "$fichier" ]; then
        echo "$fichier est un fichier"
      fi
    done
    

    Lecture interactive avec while

    #!/bin/bash
    while true; do
      read -p "Entrez un mot (ou stop pour sortir) : " mot
      [ "$mot" == "stop" ] && break
      echo "Vous avez écrit : $mot"
    done
    

    Bonus : boucle dans une fonction

    #!/bin/bash
    afficher_compteur() {
      for i in {1..3}; do
        echo "Boucle interne $i"
      done
    }
    
    afficher_compteur
    

    Erreurs fréquentes (et comment éviter le désastre)

    • Oublier le do ... done : Bash n’aime pas les oublis de syntaxe
    • Utiliser = au lieu de -eq dans une condition numérique
    • Mettre for i in 1..5 au lieu de {1..5}
    • Ne pas protéger les variables avec "$var" → danger si vide ou avec espaces

    Conclusion : la boucle, puissance répétitive maîtrisée

    Les boucles Bash vous permettent de parcourir, répéter, automatiser. Elles sont essentielles pour tous les scripts utiles — nettoyage, sauvegarde, analyse, installation par lot…

    Et surtout : ne vous laissez pas piéger par la boucle infinie. Elle tourne… jusqu’à ce que votre patience ou votre CPU cède.