Instructions conditionnelles en shell

LinuxLinuxBeginner
Pratiquer maintenant

💡 Ce tutoriel est traduit par l'IA à partir de la version anglaise. Pour voir la version originale, vous pouvez cliquer ici

Introduction

Dans ce laboratoire, vous apprendrez à utiliser les instructions conditionnelles en programmation shell pour prendre des décisions logiques. Nous aborderons la syntaxe de base des instructions if-else, ainsi que la manière d'utiliser les comparaisons numériques et de chaînes de caractères pour évaluer les conditions. À la fin de ce laboratoire, vous serez en mesure d'écrire des scripts shell capables de prendre des décisions en fonction de diverses conditions.


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL shell(("Shell")) -.-> shell/BasicSyntaxandStructureGroup(["Basic Syntax and Structure"]) shell(("Shell")) -.-> shell/VariableHandlingGroup(["Variable Handling"]) linux(("Linux")) -.-> linux/BasicSystemCommandsGroup(["Basic System Commands"]) linux(("Linux")) -.-> linux/BasicFileOperationsGroup(["Basic File Operations"]) linux(("Linux")) -.-> linux/FileandDirectoryManagementGroup(["File and Directory Management"]) shell(("Shell")) -.-> shell/ControlFlowGroup(["Control Flow"]) linux/BasicSystemCommandsGroup -.-> linux/echo("Text Display") shell/BasicSyntaxandStructureGroup -.-> shell/shebang("Shebang") shell/BasicSyntaxandStructureGroup -.-> shell/comments("Comments") linux/BasicSystemCommandsGroup -.-> linux/logical("Logic Operations") shell/VariableHandlingGroup -.-> shell/variables_decl("Variable Declaration") shell/VariableHandlingGroup -.-> shell/variables_usage("Variable Usage") linux/BasicFileOperationsGroup -.-> linux/chmod("Permission Modifying") linux/FileandDirectoryManagementGroup -.-> linux/cd("Directory Changing") shell/ControlFlowGroup -.-> shell/if_else("If-Else Statements") subgraph Lab Skills linux/echo -.-> lab-388815{{"Instructions conditionnelles en shell"}} shell/shebang -.-> lab-388815{{"Instructions conditionnelles en shell"}} shell/comments -.-> lab-388815{{"Instructions conditionnelles en shell"}} linux/logical -.-> lab-388815{{"Instructions conditionnelles en shell"}} shell/variables_decl -.-> lab-388815{{"Instructions conditionnelles en shell"}} shell/variables_usage -.-> lab-388815{{"Instructions conditionnelles en shell"}} linux/chmod -.-> lab-388815{{"Instructions conditionnelles en shell"}} linux/cd -.-> lab-388815{{"Instructions conditionnelles en shell"}} shell/if_else -.-> lab-388815{{"Instructions conditionnelles en shell"}} end

Créez votre première instruction if

Commençons par créer une simple instruction if qui vérifie si une variable appelée NAME est égale à "John".

Tout d'abord, ouvrez un terminal dans le WebIDE. Vous devriez être dans le répertoire /home/labex/project par défaut. Si vous n'êtes pas sûr, vous pouvez toujours vérifier votre répertoire actuel avec la commande pwd.

Créez un nouveau fichier appelé if.sh en utilisant la commande suivante :

touch if.sh

Cette commande crée un fichier vide nommé if.sh dans votre répertoire actuel.

Maintenant, ouvrez le fichier if.sh dans le WebIDE. Vous pouvez le faire en cliquant sur le fichier dans l'explorateur de fichiers à gauche du WebIDE.

Ajoutez le contenu suivant au fichier :

#!/bin/bash

NAME="John"
if [ "$NAME" = "John" ]; then
  echo "The name is John"
fi

Décortiquons ce script :

  1. #!/bin/bash : C'est ce qu'on appelle une ligne "shebang". Elle indique au système quel interpréteur utiliser pour exécuter le script. Dans ce cas, nous utilisons Bash.
  2. NAME="John" : Cette ligne crée une variable appelée NAME et lui assigne la valeur "John".
  3. if [ "$NAME" = "John" ]; then : C'est le début de notre instruction if. Elle vérifie si la valeur de NAME est égale à "John".
    • Les crochets [ ] sont en fait une commande dans Bash, équivalente à la commande test.
    • Nous mettons "$NAME" entre guillemets pour gérer les cas où NAME pourrait être vide ou contenir des espaces.
    • Le point-virgule et then font partie de la syntaxe de l'instruction if en Bash.
  4. echo "The name is John" : Cette ligne sera exécutée si la condition est vraie.
  5. fi : Cela marque la fin de l'instruction if. C'est "if" écrit à l'envers!

Enregistrez le fichier après avoir ajouté ce contenu.

Maintenant, nous devons rendre le script exécutable. Dans les systèmes de type Unix, les fichiers ne sont pas exécutables par défaut pour des raisons de sécurité. Nous pouvons changer cela en utilisant la commande chmod :

chmod +x if.sh

Cette commande ajoute la permission d'exécution au fichier. Le +x signifie "ajouter la permission d'exécution".

Maintenant, exécutez le script :

./if.sh

Le ./ indique au shell de chercher le script dans le répertoire actuel.

Vous devriez voir la sortie : The name is John

Si vous ne voyez pas cette sortie, vérifiez que vous avez enregistré le fichier avec le bon contenu et que vous l'avez rendu exécutable.

Ajoutez une clause else

Maintenant, développons notre instruction if pour inclure une clause else. Cela nous permet de spécifier ce qui doit se passer lorsque la condition est fausse.

Ouvrez à nouveau le fichier if.sh dans le WebIDE et modifiez-le comme suit :

#!/bin/bash

NAME="Alice"
if [ "$NAME" = "John" ]; then
  echo "The name is John"
else
  echo "The name is not John"
fi

Examinons les modifications :

  1. Nous avons changé la variable NAME en "Alice". Cela permet de démontrer ce qui se passe lorsque la condition est fausse.
  2. Nous avons ajouté une clause else. Cette clause spécifie ce qui doit se passer si la condition dans l'instruction if est fausse.
  3. Après le else, nous avons ajouté une autre commande echo qui s'exécutera si NAME n'est pas "John".

La clause else est facultative dans les instructions if, mais elle est très utile lorsque vous souhaitez faire quelque chose de spécifique lorsque la condition est fausse, plutôt que de ne rien faire.

Enregistrez le fichier avec ces modifications.

Maintenant, exécutez le script à nouveau :

./if.sh

Cette fois, vous devriez voir la sortie : The name is not John

C'est parce que NAME est maintenant "Alice", donc la condition [ "$NAME" = "John" ] est fausse, et le code dans le bloc else est exécuté.

Essayez de changer la variable NAME en "John" et d'exécuter le script à nouveau. Quelle sortie obtenez-vous? C'est un bon moyen de tester que votre instruction if-else fonctionne correctement dans les deux cas.

Introduction à elif

Parfois, nous voulons vérifier plusieurs conditions. C'est là que la clause elif (else if) est pratique. Modifions notre script pour gérer plusieurs noms.

Mettez à jour le fichier if.sh avec le contenu suivant :

#!/bin/bash

NAME="George"
if [ "$NAME" = "John" ]; then
  echo "John Lennon"
elif [ "$NAME" = "Paul" ]; then
  echo "Paul McCartney"
elif [ "$NAME" = "George" ]; then
  echo "George Harrison"
elif [ "$NAME" = "Ringo" ]; then
  echo "Ringo Starr"
else
  echo "Unknown member"
fi

Décortiquons ce script :

  1. Nous commençons par NAME="George". C'est le nom que nous allons vérifier.
  2. La première instruction if vérifie si le nom est "John".
  3. Si ce n'est pas "John", nous passons à la première instruction elif (else if), qui vérifie si le nom est "Paul".
  4. Si ce n'est pas "Paul", nous passons au prochain elif, qui vérifie pour "George".
  5. Si ce n'est pas "George", nous vérifions pour "Ringo".
  6. Si aucune de ces conditions n'est vraie, nous passons à la clause else, qui affichera "Unknown member".

La clause elif vous permet de vérifier plusieurs conditions en séquence. Vous pouvez avoir autant de clauses elif que vous en avez besoin. Les conditions sont vérifiées dans l'ordre, et la première qui est vraie aura son bloc de code correspondant exécuté.

Enregistrez le fichier avec ces modifications.

Maintenant, exécutez le script :

./if.sh

Vous devriez voir la sortie : George Harrison

Essayez de changer la variable NAME pour différentes valeurs ("John", "Paul", "Ringo" ou tout autre chose) et exécutez le script à chaque fois. Observez comment la sortie change en fonction de la valeur de NAME.

Comparaisons numériques

Les scripts shell peuvent également comparer des nombres. Créons un nouveau script pour démontrer les comparaisons numériques.

Créez un nouveau fichier appelé numeric.sh :

touch numeric.sh

Ouvrez numeric.sh dans le WebIDE et ajoutez le contenu suivant :

#!/bin/bash

NUMBER=10

if [ $NUMBER -lt 5 ]; then
  echo "The number is less than 5"
elif [ $NUMBER -eq 10 ]; then
  echo "The number is exactly 10"
elif [ $NUMBER -gt 15 ]; then
  echo "The number is greater than 15"
else
  echo "The number is between 5 and 15, but not 10"
fi

Ce script introduit les opérateurs de comparaison numérique :

  • -lt : inférieur à
  • -eq : égal à
  • -gt : supérieur à

Il existe également d'autres opérateurs que vous pouvez utiliser :

  • -le : inférieur ou égal à
  • -ge : supérieur ou égal à
  • -ne : différent de

Notez que nous utilisons ces opérateurs spéciaux au lieu de symboles tels que < ou >. C'est parce que dans Bash, < et > sont utilisés pour la redirection d'entrée/sortie, et non pour la comparaison numérique.

Maintenant, rendons le script exécutable et exécutons-le :

chmod +x numeric.sh
./numeric.sh

Vous devriez voir la sortie : The number is exactly 10

Essayez de changer la variable NUMBER pour différentes valeurs et exécutez le script à nouveau. Voyez comment la sortie change en fonction de la valeur que vous définissez.

Par exemple, si vous changez NUMBER en 20, vous devriez obtenir "The number is greater than 15". Si vous la changez en 7, vous devriez obtenir "The number is between 5 and 15, but not 10".

Comparaisons de chaînes de caractères et opérateurs logiques

Enfin, explorons les comparaisons de chaînes de caractères et les opérateurs logiques. Créez un nouveau fichier appelé string_logic.sh :

touch string_logic.sh

Ouvrez string_logic.sh dans le WebIDE et ajoutez le contenu suivant :

#!/bin/bash

STRING1="hello"
STRING2="world"
NUMBER1=5
NUMBER2=10

if [ "$STRING1" = "hello" ] && [ "$STRING2" = "world" ]; then
  echo "Both strings match"
fi

if [ $NUMBER1 -lt 10 ] || [ $NUMBER2 -gt 5 ]; then
  echo "At least one of the number conditions is true"
fi

if [[ "$STRING1"!= "$STRING2" ]]; then
  echo "The strings are different"
fi

if [[ -z "$STRING3" ]]; then
  echo "STRING3 is empty or not set"
fi

Ce script démontre plusieurs nouveaux concepts :

  1. Comparaison d'égalité de chaînes de caractères (=) : Cela vérifie si deux chaînes de caractères sont exactement les mêmes.
  2. ET logique (&&) : Cet opérateur vous permet de combiner deux conditions. Les deux conditions doivent être vraies pour que l'expression globale soit vraie.
  3. OU logique (||) : Cet opérateur combine également deux conditions, mais seule l'une d'elles doit être vraie pour que l'expression globale soit vraie.
  4. Comparaison d'inégalité de chaînes de caractères (!=) : Cela vérifie si deux chaînes de caractères sont différentes.
  5. Vérification si une chaîne de caractères est vide (-z) : Cela est vrai si la chaîne de caractères est vide (a une longueur nulle).

Notez également l'utilisation de doubles crochets [[ ]] dans certaines des instructions if. Ce sont une version améliorée des crochets simples et sont préférés dans les scripts Bash lorsque cela est possible. Ils permettent des expressions plus complexes et présentent moins de surprises en matière de découpage de mots et d'expansion de noms de chemins.

Rendez le script exécutable et exécutez-le :

chmod +x string_logic.sh
./string_logic.sh

Vous devriez voir les quatre instructions echo affichées, car toutes les conditions du script sont vraies.

Both strings match
At least one of the number conditions is true
The strings are different
STRING3 is empty or not set

Essayez de changer certaines valeurs (par exemple, en définissant STRING1 sur autre chose que "hello") et voyez comment cela affecte la sortie.

Résumé

Dans ce laboratoire, vous avez appris à utiliser les instructions conditionnelles en programmation shell. Vous avez pratiqué l'utilisation des instructions if-else, des clauses elif, des comparaisons numériques, des comparaisons de chaînes de caractères et des opérateurs logiques. Ces outils vous permettent de créer des scripts shell plus complexes et basés sur des décisions.

Points clés à retenir :

  • La structure de base des instructions if-else dans les scripts shell
  • Comment utiliser elif pour gérer plusieurs conditions
  • Les opérateurs de comparaison numérique (-lt, -gt, -eq, etc.)
  • Les comparaisons de chaînes de caractères et les opérateurs logiques
  • L'importance de rendre les scripts exécutables avec la commande chmod

N'oubliez pas que la pratique est essentielle pour devenir compétent en scripting shell. Essayez de créer vos propres scripts qui utilisent ces concepts de différentes manières. Au fur et à mesure de votre progression, vous constaterez que ces instructions conditionnelles sont essentielles pour créer des scripts plus sophistiqués et utiles.