Script Bash : comment utiliser les conditions If, Else et Elif ?
Sommaire
I. Présentation
Dans ce tutoriel, nous allons apprendre à utiliser les structures conditionnelles if, else et elif en Bash ! Ce sont des notions essentielles pour ceux qui désirent écrire des scripts Bash car elles vont permettre de contrôler le flux d'exécution du script en fonction de conditions spécifiques, c'est-à-dire en fonction d'une valeur, du résultat d'une commande, etc...
Nous commencerons par évoquer la syntaxe de base de ces structures conditionnelles avant de passer à des exemples concrets pour illustrer leur utilisation dans un script Bash.
En complément de cet article, nous vous recommandons la lecture de celui-ci :
II. Syntaxe de base des instructions If, Else et Elif en Bash
D'abord, nous allons commencer par évoquer la syntaxe de ces différentes instructions. Puis, nous passerons à une mise en pratique avec différents exemples.
A. Structure du if
Premièrement, nous allons évoquer la syntaxe d'une structure conditionnelle basée uniquement sur un "if" en Bash. Ceci signifie que le code sera exécuté uniquement si la condition testée est vraie. Si elle est fausse, aucune action spécifique sera exécutée, car nous n'utilisons pas le "else".
Voici la syntaxe :
if [ condition ]
then
# Bloc de code à exécuter si la condition est vraie
fi
Concrètement, et pour faciliter votre compréhension, nous pourrions le traduire de cette façon :
si [ la condition est vrai ]
ensuite
# exécuter ces commandes
fin
Ce qu'il faut retenir :
- La condition à évaluer est spécifiée entre crochet. Il est possible d'évaluer plusieurs conditions.
- L'instruction "if" est toujours suivie par l'instruction "then", à la suite de la condition.
- L'instruction "fi" détermine la fin de la structure conditionnelle.
B. Structure du if else
Deuxièmement, intéressons-nous à la syntaxe d'une instruction "if" couplée avec un "else", ce qui va permettre permet d'exécuter un bloc de code si une condition est vraie, et un autre bloc si cette condition est fausse.
Voici la syntaxe de base :
if [ condition ]
then
# Bloc de code à exécuter si la condition est vraie
else
# Bloc de code à exécuter si la condition est fausse
fi
Nous pourrions le traduire de cette façon :
si [ la condition est vrai ]
ensuite
# exécuter ces commandes
sinon
# exécuter ces commandes
fin
De plus, nous pouvons constater que la ligne "fi" est toujours présente à la fin, même lorsque l'instruction "else" est utilisée. Ceci est exact également avec le "elif".
C. Structure du if, elif, else
Troisièmement, pour aller plus loin, nous pouvons évaluer plusieurs conditions de façon indépendante grâce à l'utilisation de l'instruction "elif" avec "if" et "else". Ici, vous devez comprendre que le "elif" est l'équivalent du "elseif" dans d'autres langages. Nous pourrions traduire son nom par "Sinon si".
if [ condition 1 ]
then
# Bloc de code à exécuter si la première condition est vraie
elif [ condition 2 ]
then
# Bloc de code à exécuter si la deuxième condition est vraie
else
# Bloc de code à exécuter si les différentes conditions sont fausses
fi
Encore une fois, nous pourrions traduire cette structure conditionnelle pour faciliter la compréhension de sa logique.
si [ cette condition est vrai ]
ensuite
# exécuter ces commandes
sinon si [ cette condition est vrai ]
ensuite
# exécuter ces commandes
sinon
# exécuter ces commandes
fin
Désormais, nous allons voir comment utiliser ces différentes instructions avec plusieurs exemples pratiques.
III. Utilisation de If et Else dans un script Bash
A. Premier exemple
Pour que vous puissiez vous familiariser avec l'utilisation des instructions "if" et "else" en Bash, nous allons commencer par un exemple très simple. L'objectif est simple : associer un nombre à une valeur et vérifier s'il est supérieur à 10.
Nous allons créer le script Bash "if.sh" et ajouter le code suivant :
#!/bin/bash
# Valeur à évaluer
nombre=20
# Vérifier si le nombre est supérieur à 10
if [ $nombre -gt 10 ]
then
echo "Le nombre est supérieur à 10."
fi
Dans cet exemple, un opérateur de comparaison est utilisé : "-gt" dont la signifie est "greater than" c'est-à-dire "plus grand que". Bien entendu, il en existe d'autres en Bash.
Puis, si nous exécutons ce script, nous pouvons constater qu'il fonctionne, car il retourne le texte "Le nombre est supérieur à 10.".
En revanche, si la condition est fausse (nombre inférieur ou égal à 10), rien ne va se passer ! Pour modifier ce comportement, nous devons ajouter une instruction "else".
Donc, nous devons modifier le code tel que précisé ci-dessous (le nombre est volontairement modifié pour le test). Vous pouvez aussi créer un nouveau script pour conserver les deux versions.
#!/bin/bash
# Valeur à évaluer
nombre=5
# Vérifier si le nombre est supérieur ou inférieur/égal à 10
if [ $nombre -gt 10 ]
then
echo "Le nombre est supérieur à 10."
else
echo "Le nombre est inférieur ou égal à 10."
fi
Finalement, nous obtenons bien le résultat attendu :
B. Deuxième exemple
Pour terminer cette partie de l'article, nous allons évoquer un second exemple. L'objectif de ce script est d'indiquer si un fichier ou s'il n'existe pas, en prenant comme chemin à tester la valeur de la variable "fichier".
Ci-après, le bout de code correspondant. Dans cet exemple, le chemin évalué est "/home/flo/it-connect.txt".
#!/bin/bash
# Nom du fichier à tester
fichier="/home/flo/it-connect.txt"
# Vérifier si le fichier existe
if [ -e "$fichier" ]
then
echo "Le fichier $fichier existe sur cette machine !"
else
echo "Le fichier $fichier n'existe pas sur cette machine !"
fi
Donc, ici, il est intéressant de noter la particularité dans l'écriture de la condition puisque nous utilisons l'opérateur "-e" dans le but de vérifier si le fichier existe. Ceci pourrait fonctionner pour des éléments de différents types (fichier, répertoire, lien symbolique, etc.). De plus, pour vérifier si l'élément est un dossier, nous pouvons utiliser l'opérateur "-d" à la place de "-e".
Enfin, voici le résultat en image où nous voyons bien que le script retourne un résultat différent, en fonction de la présence ou non du fichier sur la machine.
IV. Utilisation de Elif dans un script Bash : des conditions multiples
L'instruction "elif" (else if) permet de tester plusieurs conditions de façon séquentielle. Cette structure est utile lorsque vous devez vérifier plusieurs conditions différentes et exécuter différents blocs de code en fonction de chacune de ces conditions indépendantes. Autrement dit, c'est très utile pour gérer des scénarios où plusieurs conditions doivent être vérifiées successivement.
L'exemple ci-dessous sert à retourner "Bonjour" jusqu'à 13:00, "Bon après-midi" entre 13:00 et 17:00 et "Bonsoir" à partir de "17:00". Le résultat du script dépendra de l'heure de la journée. Cette information étant stockée dans la variable "heure" en tout début de script. L'intérêt de ce script étant surtout de se familiariser avec cette syntaxe.
Voici le bout de code :
#!/bin/bash
# Définir l'heure
heure=16
# Retourner un message en fonction de l'heure
if [ $heure -lt 13 ]
then
echo "Bonjour !"
elif [ $heure -lt 17 ]
then
echo "Bon après-midi !"
else
echo "Bonsoir !"
fi
Ici, nous utilisons l'opérateur de comparaison "-lt" qui signifie "less than...", soit "moins que..." ou "plus petit que...".
Enfin, l'image ci-dessous montre le comportement du script en pratique. Pour effectuer plusieurs tests, modifiez simplement la valeur de la variable "heure".
V. Les opérateurs logiques pour combiner des conditions
En Bash, comme avec d'autres langages, nous pouvons utiliser des opérateurs logiques pour combiner plusieurs conditions dans une seule expression. Donc, cette flexibilité permet de créer des conditions plus complexes et de les vérifier en une seule instruction. Autrement dit, dans une seule instruction "if", nous allons pouvoir évaluer non pas une condition, mais plusieurs conditions.
Pour débuter, ces deux opérateurs logiques sont à connaître :
- && correspondant à "et"
- || correspondant à "ou"
Nous allons mettre en pratique l'opérateur "&&" dans un exemple très simple, tout en sachant que l'opérateur "||" s'utilise de la même façon. De plus, les deux peuvent être combinés, selon les besoins et scénarios d'usage.
L'exemple ci-dessous permet de déterminer si les services Apache2 et SSH sont actifs sur la machine, en récupérant l'état des deux services via systemctl. Lorsqu'un statut est actif, la commande "systemctl is-active <nom du service>" retourne la valeur "active" : une information importante pour écrire nos deux conditions au sein de l'instruction "if".
Remarque : nous utilisons l'opérateur "&&" correspondant à "et" donc nos deux conditions liées. Elles doivent être vraies toutes les deux pour que le code dans le "if" soit exécuté.
Voici le script Bash pour effectuer cette vérification :
#!/bin/bash
# Etat du service SSH
ServiceSSH=$(systemctl is-active ssh)
# Etat du service Apache2
ServiceApache2=$(systemctl is-active apache2)
# Déterminer si les services sont actifs
if [ $ServiceSSH = "active" ] && [ $ServiceApache2 = "active" ]
then
echo "Les deux services sont en cours d'exécution"
else
echo "ERREUR ! Statut SSH : $ServiceSSH - Statut Apache2 : $ServiceApache2"
fi
Finalement, le script retourne bien un état différent selon s'il y a les deux services actifs ou un seul des deux services. C'est bien le résultat attendu. Je vous invite à tester de votre côté.
VI. Conclusion
Les structures conditionnelles if, else et elif en Bash sont indispensables pour contrôler le flux d'exécution de vos scripts. Au niveau de la syntaxe, leur utilisation se résume à 5 mots clés à retenir : if, then, elif, else et fi.
Nous avons vu comment les utiliser au travers d'exemples simples, mais utiles pour une première prise en main. Inspirez-vous de ces exemples pour écrire vos scripts et sachez que vous pouvez également imbriquer les structures conditionnelles. C'est un besoin fréquent pour les scripts avancés.
Pour approfondir le sujet, vous pouvez consulter nos tutoriels Bash en utilisant le lien ci-dessous :
D'autres tutoriels sur Bash seront publiés par la suite sur IT-Connect !
Merci et bravo pour ces explications détaillées et avec des exemples concrets.
Bien mais pourquoi avoir remplacé « alors » par « ensuite » ?
« Ensuite » n’a pas le même sens que « alors » mais bon…