Les boucles en script Bash

ShellBeginner
Pratiquer maintenant

Introduction

Dans cet atelier, vous allez apprendre à utiliser les boucles dans les scripts Bash. Les boucles sont des outils puissants qui vous permettent de répéter un ensemble d'instructions plusieurs fois, rendant vos scripts plus efficaces et plus flexibles. Nous aborderons trois types de boucles : for, while et until. De plus, vous découvrirez les instructions break et continue, qui permettent de contrôler finement l'exécution des boucles. Cet atelier est conçu pour les débutants et vous guidera pas à pas à travers chaque concept.

Configuration de l'environnement

Commençons par configurer notre environnement de travail. Nous allons créer un nouveau répertoire pour stocker toutes nos expérimentations sur les boucles.

Ouvrez un terminal dans le WebIDE. Vous devriez vous trouver par défaut dans le répertoire /home/labex/project. Si vous n'en êtes pas sûr, vous pouvez toujours vous y rendre en utilisant cette commande :

cd /home/labex/project

Maintenant, créons un nouveau répertoire pour nos exercices sur les boucles :

mkdir bash_loops
cd bash_loops

Cela crée un nouveau dossier nommé bash_loops et vous place à l'intérieur. Nous utiliserons ce répertoire pour tous nos scripts de cet atelier.

Pourquoi procédons-nous ainsi ? Organiser vos scripts dans des répertoires est une bonne pratique. Cela permet de garder votre travail ordonné et facilite la recherche et la gestion de vos fichiers.

La boucle for

La boucle for est utilisée pour itérer sur une liste de valeurs. C'est comme si vous disiez : "Pour chaque élément de cette liste, fais ceci." Créons un script qui illustre l'utilisation d'une boucle for.

Créez un nouveau fichier nommé for_loop.sh dans le répertoire bash_loops :

touch for_loop.sh

Maintenant, ouvrez le fichier for_loop.sh dans le WebIDE et ajoutez le contenu suivant :

#!/bin/bash

## Loop through an array of names
echo "Looping through an array:"
NAMES=("Alice" "Bob" "Charlie" "David")
for name in "${NAMES[@]}"; do
  echo "Hello, $name!"
done

echo ## Print an empty line for readability

## Loop through a range of numbers
echo "Looping through a range of numbers:"
for i in {1..5}; do
  echo "Number: $i"
done

Analysons ce que fait ce script :

  1. La première boucle parcourt un tableau de noms. Pour chaque nom présent dans le tableau, elle affiche une salutation.
  2. La seconde boucle utilise une plage {1..5} pour compter de 1 à 5.

La syntaxe "${NAMES[@]}" peut paraître complexe. Le symbole @ signifie "tous les éléments du tableau", tandis que les guillemets et les accolades garantissent que chaque élément est traité individuellement, même s'il contient des espaces.

Enregistrez le fichier et rendez-le exécutable avec cette commande :

chmod +x for_loop.sh

La commande chmod +x rend le fichier exécutable, ce qui signifie que vous pouvez le lancer comme un programme.

Maintenant, exécutez le script :

./for_loop.sh

Vous devriez voir un résultat comme celui-ci :

Looping through an array:
Hello, Alice!
Hello, Bob!
Hello, Charlie!
Hello, David!

Looping through a range of numbers:
Number: 1
Number: 2
Number: 3
Number: 4
Number: 5

Cela démontre comment les boucles for peuvent itérer aussi bien sur des tableaux que sur des plages de nombres.

La boucle while

La boucle while exécute un bloc de code tant qu'une condition spécifiée est vraie. C'est comme si vous disiez : "Tant que cette condition est remplie, continue de faire cela."

Créez un nouveau fichier nommé while_loop.sh :

touch while_loop.sh

Ouvrez le fichier while_loop.sh dans le WebIDE et ajoutez le contenu suivant :

#!/bin/bash

## Simple countdown using a while loop
count=5
echo "Countdown:"
while [ $count -gt 0 ]; do
  echo $count
  count=$((count - 1))
  sleep 1 ## Wait for 1 second
done
echo "Blast off!"

Décortiquons ce script :

  1. Nous commençons avec count=5 pour définir notre valeur de départ pour le compte à rebours.
  2. La condition [ $count -gt 0 ] signifie "tant que la variable count est plus grande que 0".
  3. À l'intérieur de la boucle, nous affichons la valeur actuelle, nous la diminuons de 1, puis nous attendons une seconde.
  4. Ce processus se répète jusqu'à ce que count atteigne 0, moment où la boucle s'arrête.

La commande sleep 1 met le script en pause pendant une seconde, créant ainsi un effet de compte à rebours en temps réel.

Enregistrez le fichier et rendez-le exécutable :

chmod +x while_loop.sh

Maintenant, lancez le script :

./while_loop.sh

Vous verrez un compte à rebours de 5 à 1, avec une pause d'une seconde entre chaque chiffre :

Countdown:
5
4
3
2
1
Blast off!

Cela montre comment une boucle while peut répéter une action jusqu'à ce qu'une condition ne soit plus vérifiée.

La boucle until

La boucle until est similaire à la boucle while, mais avec une différence majeure : elle continue de s'exécuter jusqu'à ce qu'une condition spécifiée devienne vraie. C'est comme si vous disiez : "Continue de faire cela jusqu'à ce que cette condition soit remplie."

Créez un nouveau fichier nommé until_loop.sh :

touch until_loop.sh

Ouvrez le fichier until_loop.sh dans le WebIDE et insérez le contenu suivant :

#!/bin/bash

## Count up to 5 using an until loop
count=1
echo "Counting up to 5:"
until [ $count -gt 5 ]; do
  echo $count
  count=$((count + 1))
  sleep 1 ## Wait for 1 second
done

Analysons ce script :

  1. Nous initialisons la valeur de départ avec count=1.
  2. La condition [ $count -gt 5 ] signifie "jusqu'à ce que count soit plus grand que 5".
  3. À l'intérieur de la boucle, nous affichons le chiffre actuel, nous l'augmentons de 1, puis nous attendons une seconde.
  4. Cela continue jusqu'à ce que count devienne supérieur à 5, ce qui met fin à la boucle.

Enregistrez le fichier et rendez-le exécutable :

chmod +x until_loop.sh

Maintenant, exécutez le script :

./until_loop.sh

Vous verrez les chiffres de 1 à 5 s'afficher avec une seconde d'intervalle :

Counting up to 5:
1
2
3
4
5

Cela illustre comment une boucle until peut répéter une action jusqu'à ce qu'une condition soit enfin satisfaite.

Utilisation des instructions break et continue

Les instructions break et continue servent à contrôler le flux des boucles. break permet de quitter prématurément une boucle, tandis que continue permet de sauter le reste de l'itération actuelle pour passer directement à la suivante.

Créez un nouveau fichier nommé break_continue.sh :

touch break_continue.sh

Ouvrez le fichier break_continue.sh dans le WebIDE et ajoutez le contenu suivant :

#!/bin/bash

## Using break to exit a loop early
echo "Demonstration of break:"
for i in {1..10}; do
  if [ $i -eq 6 ]; then
    echo "Breaking the loop at $i"
    break
  fi
  echo $i
done

echo ## Print an empty line for readability

## Using continue to skip iterations
echo "Demonstration of continue (printing odd numbers):"
for i in {1..10}; do
  if [ $((i % 2)) -eq 0 ]; then
    continue
  fi
  echo $i
done

Analysons ce script :

  1. Dans la première boucle, nous utilisons break pour sortir de la boucle dès que i est égal à 6.
  2. Dans la seconde boucle, nous utilisons continue pour ignorer les nombres pairs. La condition $((i % 2)) -eq 0 vérifie si un nombre est pair (divisible par 2 sans reste).

L'opérateur % calcule le reste d'une division. Ainsi, i % 2 vaudra 0 pour les nombres pairs et 1 pour les nombres impairs.

Enregistrez le fichier et rendez-le exécutable :

chmod +x break_continue.sh

Maintenant, lancez le script :

./break_continue.sh

Le résultat devrait ressembler à ceci :

Demonstration of break:
1
2
3
4
5
Breaking the loop at 6

Demonstration of continue (printing odd numbers):
1
3
5
7
9

Cela démontre comment break peut interrompre une boucle et comment continue peut ignorer certaines étapes en fonction d'une condition.

Résumé

Dans cet atelier, vous avez découvert trois types de boucles en script Bash :

  1. Les boucles for, qui itèrent sur une liste d'éléments ou une plage de nombres.
  2. Les boucles while, qui se poursuivent tant qu'une condition est vraie.
  3. Les boucles until, qui se poursuivent jusqu'à ce qu'une condition devienne vraie.

Vous avez également appris à utiliser les instructions break et continue, qui vous offrent un contrôle accru sur le comportement de vos boucles.

Ces structures de boucle sont fondamentales pour de nombreux scripts et vous permettront d'automatiser efficacement des tâches répétitives. Entraînez-vous à utiliser ces boucles dans vos propres scripts pour vous familiariser avec leur fonctionnement et leurs cas d'utilisation.