Menu Fermer

La boucle while en bash Linux avec 7 exemples

Dans un précédent tutoriel, je vous montrais comment faire une boucle for.
Avec until, il existe une autre boucle while, très pratique pour gérer des répétitions dans un script shell.

Dans ce tutoriel, je vous montre aussi comment faire une boucle while en bash Linux avec plusieurs exemples.

La boucle while en bash Linux avec exemples

Comment utiliser une boucle while en bash Linux

La boucle while est utilisée pour exécuter un ensemble donné de commandes tant que la condition donnée est vraie.

La boucle while de Bash se présente sous la forme suivante :

while [ condition ];
do
    commandes
done

Pour faire une boucle while sur une seule ligne :

while [ condition ]; do commandes ; done

L’instruction while commence par le mot-clé while, suivi de l’expression conditionnelle.
La condition est évaluée avant d’exécuter les commandes. Si la condition est vraie, les commandes sont exécutées. Dans le cas contraire, si la condition est évaluée à faux, la boucle est terminée et le contrôle du programme est transmis à la commande qui suit.

La boucle while en bash Linux avec des exemples

Boucle while en incrémentant un compteur

Voici un exemple simple d’utilisation de la boucle while avec un compteur.

i=0

while [ $i -le 5 ]
do
  echo Nombre: $i
  ((i++))
done

Voici les explications détaillées :

  • Tout d’abord, on initialise la variable i à 0
  • Puis on débute la boucle While avec la condition suivante : tant que la variable i est inférieure à 5
  • Puis on affiche le compteur avec la commande echo
  • Ensuite on incrémente le compteur de 1 avec ((i++))

De ce fait, la boucle while s’arrête dès que le compteur i atteint 5.

La boucle while en bash Linux avec des exemples

Lire un fichier avec while

L’une des utilisations les plus courantes de la boucle while consiste à lire un fichier, un flux de données ou une variable ligne par ligne.

Voici un exemple qui lit le fichier /etc/passwd ligne par ligne et imprime chaque ligne :

fichier=/etc/passwd

while read -r ligne;
do
  echo $ligne
done < "$fichier"

Au lieu de contrôler la boucle while avec une condition, nous utilisons la redirection d’entrée (< “$fichier”) pour transmettre un fichier à la commande read, qui contrôle la boucle. La boucle while s’exécutera jusqu’à ce que la dernière ligne soit lue.
Lorsque vous lisez un fichier ligne par ligne, utilisez toujours read avec l’option -r afin d’éviter que la barre oblique inverse n’agisse comme un caractère d’échappement.

Par défaut, la commande read coupe les caractères d’espacement de début et de fin (espaces et tabulations). Utilisez l’option IFS= avant la lecture pour empêcher ce comportement :

fichier=/etc/passwd

while IFS= read -r ligne
do
  echo $ligne
done < "$fichier"
La boucle while en bash Linux avec des exemples

Exemple de boucle infinie while

Pour créer une boucle infinie à l’aide d’une instruction de boucle while. Nous n’avons pas besoin de mettre de condition dans la boucle while et donc la boucle itère à l’infini. L’exemple ci-dessous est celui d’une boucle infinie :

while :
do
  echo "Une boucle infinie While"
done

L’utilisation suivante permet aussi de créer une boucle infinie puisque la condition testée est toujours vraie.

while [[ 1 == 1 ]]
do
  echo "Une boucle infinie While"
done
La boucle while en bash Linux avec des exemples

Rupture conditionnelle avec sortie

L’instruction break met fin à la boucle en cours et transmet le contrôle du programme à la commande qui suit la boucle terminée. Elle est généralement utilisée pour mettre fin à la boucle lorsqu’une certaine condition est remplie.

Dans l’exemple suivant, l’exécution de la boucle sera interrompue lorsque l’élément itéré actuel sera égal à 2.

i=0

while [ $i -lt 5 ]
do
  echo "Nombre: $i"
  ((i++))
  if [[ "$i" == '2' ]]; then
    break
  fi
done

echo 'Fin du script'
La boucle while en bash Linux avec des exemples

Utiliser l’instruction continue avec une boucle while

L’instruction continue quitte l’itération actuelle d’une boucle et transmet le contrôle du programme à l’itération suivante de la boucle.
Dans l’exemple ci-dessous, une fois que l’élément itéré actuel est égal à 2, l’instruction continue fera revenir l’exécution au début de la boucle et continuera avec l’itération suivante.

i=0
while [ $i -lt 5 ]
do
  ((i++))
  if [[ "$i" == '2' ]]; then
    continue
  fi
  echo "Nombre: $i"
done

echo 'Fin du script'
La boucle while en bash Linux avec des exemples

Inspecter les paramètres d’un script shell

Nous pouvons utiliser les options de getopts pour lire l’entrée de la ligne de commande et s’il y a plusieurs arguments, nous pouvons les vérifier et les analyser un par un en utilisant une boucle while.
getopts est un outil pour obtenir l’entrée de l’utilisateur à partir de la ligne de commande, Nous pouvons avoir plusieurs options à analyser à partir de la ligne de commande, et en utilisant getopts et les boucles while, nous pouvons faire un programme d’entrée utilisateur d’aspect professionnel.

Dans l’exemple ci-dessous, la boucle while vérifie les arguments à l’aide de getopts puis traite les cas grâce à case.

#!/bin/bash

function usage {
        echo "./$(basename $0) -h --> Afficher l'utilisation"
}

optstring=":h"

while getopts ${optstring} arg; do
  case ${arg} in
    h)
      echo "Utilisations"
      usage
      ;;
    :)
      echo "$0: Doit fournir un argument à -$OPTARG." >&2
      exit 1
      ;;
    ?)
      echo "Options invalides : -${OPTARG}."
      exit 2
      ;;
  esac
done