Unix / Linux - Contrôle des boucles en Shell

Bonjour, aspirants programmeurs ! Aujourd'hui, nous allons plonger dans le monde passionnant du contrôle des boucles dans les scripts Shell de Unix et Linux. En tant que votre professeur d'informatique du coin, je suis là pour vous guider dans ce voyage, étape par étape. Ne vous inquiétez pas si vous êtes nouveau dans la programmation - nous allons commencer par les bases et progresser pas à pas. Alors, prenez une tasse de café (ou de thé, si c'est votre truc), et mettons-nous aux boucles !

Unix / Linux - Loop Control

Comprendre les boucles

Avant de sauter dans le contrôle des boucles, récapitulons rapidement ce qu'elles sont. Imaginez que vous êtes chargé d'écrire "J'aime la programmation" sur un tableau noir 100 fois. Au lieu d'écrire manuellement cette phrase 100 fois, vous pourriez utiliser une boucle pour automatiser cette tâche répétitive. C'est exactement ce que font les boucles en programmation - elles nous permettent d'exécuter un ensemble de commandes plusieurs fois sans avoir à les réécrire à chaque fois.

La boucle infinie

Maintenant, parlons de quelque chose à la fois fascinant et potentiellement dangereux : la boucle infinie. C'est comme une toupie qui ne s'arrête jamais - elle continue et continue.

Qu'est-ce qu'une boucle infinie ?

Une boucle infinie est une boucle qui continue de s'exécuter indéfiniment parce que sa condition de terminaison n'est jamais rencontrée. Bien que cela puisse sembler une recette pour le désastre, il y a en réalité des scénarios où les boucles infinies sont utiles (nous y viendrons plus tard).

Exemple de boucle infinie

Voici un exemple simple de boucle infinie en scripting Shell :

#!/bin/bash
while true
do
echo "This is an infinite loop!"
sleep 1
done

Dans ce script :

  • while true crée une condition toujours vraie, donc la boucle ne s'arrête jamais.
  • echo affiche notre message.
  • sleep 1 met le script en pause pendant 1 seconde avant l'itération suivante.

Si vous exécutez ce script, vous verrez "This is an infinite loop!" affiché toutes les secondes jusqu'à ce que vous arrêtiez le script manuellement (généralement en appuyant sur Ctrl+C).

Quand pourrions-nous utiliser des boucles infinies ?

Croyez-le ou non, les boucles infinies ne sont pas toujours mauvaises ! Elles peuvent être utiles dans des scénarios comme :

  1. Créer un programme qui doit s'exécuter en continu (comme un serveur).
  2. Implémenter un système de menu où l'utilisateur peut choisir des options à plusieurs reprises.
  3. Surveiller des systèmes pour des événements ou des conditions spécifiques.

N'oubliez pas, avec grand pouvoir vient grande responsabilité. Assurez-vous toujours d'avoir un moyen de sortir de vos boucles infinies lorsque c'est nécessaire !

L'instruction break

Maintenant que nous avons vu comment les boucles peuvent durer éternellement, apprenons comment les arrêter lorsque nous le voulons. Voici l'instruction break - votre issue de secours de toute boucle.

Qu'est-ce que fait break ?

L'instruction break fait exactement ce qu'elle dit - elle "sort" de la boucle actuelle, indépendamment de ce que dit la condition de la boucle.

Exemple d'utilisation de break

Modifions notre boucle infinie précédente pour qu'elle s'arrête après 5 itérations :

#!/bin/bash
count=0
while true
do
echo "Loop iteration: $count"
count=$((count + 1))
if [ $count -eq 5 ]
then
echo "Breaking the loop!"
break
fi
sleep 1
done
echo "Loop has ended."

Dans ce script :

  • Nous initialisons une variable count pour suivre les itérations.
  • Chaque itération, nous incrémentons count et vérifions si elle est égale à 5.
  • Si count est 5, nous affichons un message et utilisons break pour sortir de la boucle.

Lorsque vous exécutez ce script, vous verrez qu'il compte jusqu'à 5 puis s'arrête.

L'instruction continue

Alors que break nous permet de sortir entirely d'une boucle, parfois nous voulons simplement sauter le reste de l'itération actuelle et passer à la suivante. C'est là que rentre en jeu l'instruction continue.

Qu'est-ce que fait continue ?

L'instruction continue saute le reste de l'itération actuelle de la boucle et passe à l'itération suivante.

Exemple d'utilisation de continue

Créons un script qui affiche les nombres de 1 à 10, mais saute les nombres pairs :

#!/bin/bash
for i in {1..10}
do
if [ $((i % 2)) -eq 0 ]
then
continue
fi
echo $i
done

Dans ce script :

  • Nous utilisons une boucle for pour itérer de 1 à 10.
  • if [ $((i % 2)) -eq 0 ] vérifie si le nombre est pair ( divisible par 2 sans reste).
  • Si le nombre est pair, continue saute à l'itération suivante.
  • Sinon, nous affichons le nombre.

Lorsque vous exécutez ce script, vous ne verrez que les nombres impairs : 1, 3, 5, 7, 9.

Mettre tout ensemble

Maintenant que nous avons appris sur les boucles infinies, break, et continue, créons un exemple plus complexe qui utilise tous ces concepts :

#!/bin/bash

echo "Welcome to the Number Guessing Game!"
secret_number=$((RANDOM % 10 + 1))
attempts=0

while true
do
read -p "Guess a number between 1 and 10 (or 'q' to quit): " guess

if [ "$guess" = "q" ]
then
echo "Thanks for playing! The secret number was $secret_number."
break
fi

if ! [[ "$guess" =~ ^[0-9]+$ ]]
then
echo "Please enter a valid number or 'q' to quit."
continue
fi

attempts=$((attempts + 1))

if [ "$guess" -eq "$secret_number" ]
then
echo "Congratulations! You guessed the number in $attempts attempts!"
break
elif [ "$guess" -lt "$secret_number" ]
then
echo "Too low! Try again."
else
echo "Too high! Try again."
fi
done

Ce script crée un jeu simple de devinette de nombre qui démontre :

  • Une boucle infinie pour maintenir le jeu en cours.
  • L'utilisation de break pour sortir lorsque le joueur devine correctement ou choisit de quitter.
  • L'utilisation de continue pour sauter les entrées invalides.

Résumé des instructions de contrôle des boucles

Voici un tableau de référence rapide des instructions de contrôle des boucles que nous avons apprises :

Instruction Description Cas d'utilisation
while true Crée une boucle infinie Lorsque vous avez besoin d'une boucle pour s'exécuter en continu jusqu'à ce qu'une condition spécifique soit remplie
break Sort de la boucle actuelle Lorsque vous voulez arrêter la boucle en fonction d'une certaine condition
continue Passe à l'itération suivante Lorsque vous voulez sauter le reste de l'itération actuelle en fonction d'une condition

Souvenez-vous, les boucles sont des outils puissants en programmation, mais avec grand pouvoir vient grande responsabilité. Assurez-vous toujours d'avoir un moyen de sortir de vos boucles, et utilisez break et continue avec discernement pour créer des scripts efficaces et efficaces.

Bonne programmation, futurs magiciens du scripting Shell ! Que vos boucles soient infinies uniquement lorsque vous le souhaitez, et que vos instructions break soient toujours là lorsque vous en avez besoin. Jusqu'à la prochaine fois, continuez à boucler et à apprendre !

Credits: Image by storyset