Bash Basics Series #7 : Déclaration If Else

Bash prend en charge les instructions if-else afin que vous puissiez utiliser le raisonnement logique dans vos scripts shell.
La syntaxe générique if-else ressemble à ceci :
if [ expression ]; then
## execute this block if condition is true else go to next
elif [ expression ]; then
## execute this block if condition is true else go to next
else
## if none of the above conditions are true, execute this block
fi
Comme vous pouvez le remarquer :
elif
est utilisé pour le type de condition “else if”- Les conditions if else se terminent toujours par
fi
- l’utilisation du point-virgule
;
etthen
mot-clé
Avant de montrer les exemples de if et else-if, permettez-moi de partager d’abord des expressions de comparaison courantes (également appelées conditions de test).
Contents
Conditions d’essai
Voici les opérateurs de condition de test que vous pouvez utiliser pour la comparaison numérique :
Condition | Équivalent à vrai quand |
---|---|
$a -lt $b | $a < $b ($a est jeess than $b) |
$a -gt $b | $a > $b ($a est gréchaud than $b) |
$a -le $b | $a <= $b ($a est jeou equal que $b) |
$a -ge $b | $a >= $b ($a est gou equal que $b) |
$a -eq $b | $a est égal à $b |
$a -ne $b | $a n’est pas égal à $b |
Si vous comparez des chaînes, vous pouvez utiliser ces conditions de test :
Condition | Équivalent à vrai quand |
---|---|
“$a” = “$b” | $a est identique à $b |
“$a” == “$b” | $a est identique à $b |
“$a” != “$b” | $a est différent de $b |
-z “$a” | $a est vide |
Il existe également des conditions pour la vérification du type de fichier :
Condition | Équivalent à vrai quand |
---|---|
-f $a | $a est un fichier |
-d $a | $a est un répertoire |
-L $a | $a est un lien |
Maintenant que vous connaissez les différentes expressions de comparaison, voyons-les en action dans divers exemples.
Utiliser l’instruction if dans bash
Créons un script qui vous indique si un nombre donné est pair ou non.
Voici mon script nommé even.sh
:
#!/bin/bash
read -p "Enter the number: " num
mod=$(($num%2))
if [ $mod -eq 0 ]; then
echo "Number $num is even"
fi
L’opération de module (%) renvoie zéro lorsqu’il est parfaitement divisé par le nombre donné (2 dans ce cas).
🚧
Portez une attention particulière à l’espace. Il doit y avoir un espace entre les parenthèses ouvrante et fermante et les conditions. De même, l’espace doit être avant et après les opérateurs conditionnels (-le, == etc).
Voici ce qu’il affiche lorsque j’exécute le script :

Avez-vous remarqué que le script vous indique quand un nombre est pair mais qu’il n’affiche rien lorsque le nombre est impair ? Améliorons ce script avec l’utilisation de else.
Utiliser l’instruction if else
Maintenant, j’ajoute une instruction else dans le script précédent. De cette façon, lorsque vous obtenez un module non nul (car les nombres impairs ne sont pas divisés par 2), il entrera dans le bloc else.
#!/bin/bash
read -p "Enter the number: " num
mod=$(($num%2))
if [ $mod -eq 0 ]; then
echo "Number $num is even"
else
echo "Number $num is odd"
fi
Recommençons avec les mêmes numéros :

Comme vous pouvez le voir, le script est meilleur car il vous indique également si le nombre est impair.
Utiliser l’instruction elif (else if)
Voici un script qui vérifie si le nombre donné est positif ou négatif. En mathématiques, 0 n’est ni positif ni négatif. Ce script garde également ce fait sous contrôle.
#!/bin/bash
read -p "Enter the number: " num
if [ $num -lt 0 ]; then
echo "Number $num is negative"
elif [ $num -gt 0 ]; then
echo "Number $num is positive"
else
echo "Number $num is zero"
fi
Permettez-moi de l’exécuter pour couvrir les trois cas ici:

Combinez plusieurs conditions avec des opérateurs logiques
Jusqu’ici, tout va bien. Mais savez-vous que vous pouvez avoir plusieurs conditions en une seule en utilisant des opérateurs logiques tels que AND (&&), OR (||) etc ? Il vous donne la possibilité d’écrire des conditions complexes.
Écrivons un script qui vous indique si l’année donnée est bissextile ou non.
Vous souvenez-vous des conditions pour être une année bissextile ? Elle doit être divisée par 4 mais si elle est divisible par 100, ce n’est pas une année bissextile. Cependant, si elle est divisible par 400, c’est une année bissextile.
Voici mon scénario.
#!/bin/bash
read -p "Enter the year: " year
if [[ ($(($year%4)) -eq 0 && $(($year%100)) != 0) || ($(($year%400)) -eq 0) ]]; then
echo "Year $year is leap year"
else
echo "Year $year is normal year"
fi
💡
Remarquez l’utilisation de doubles parenthèses [[ ]]au-dessus de. Il est obligatoire si vous utilisez des opérateurs logiques.
Vérifiez le script en l’exécutant avec des données différentes :

🏋️ Temps d’exercice
Faisons un peu d’exercice 🙂
Exercice 1: écrivez un script shell bash qui vérifie la longueur de la chaîne qui lui est fournie en tant qu’argument. Si aucun argument n’est fourni, il affiche ‘chaîne vide’.
Exercice 2: écrivez un script shell qui vérifie si un fichier donné existe ou non. Vous pouvez fournir le chemin d’accès complet au fichier comme argument ou l’utiliser directement dans le script.
Indice: Utilisez -f pour le fichier
Exercice 3: Améliorer le script précédent en vérifiant si le fichier donné est un fichier normal, un répertoire ou un lien ou s’il n’existe pas.
Indice: Utilisez -f, -d et -L
Exercice 3: écrivez un script qui accepte deux arguments de chaîne. Le script doit vérifier si la première chaîne contient le deuxième argument en tant que sous-chaîne.
Indice: Reportez-vous au chapitre précédent sur les chaînes bash
Vous pouvez discuter de votre solution dans la Communauté :
Exercice pratique dans la série #7 de Bash Basics : If Else Statements
Si vous suivez la série Bash Basics sur It’s FOSS, vous pouvez soumettre et discuter des réponses à l’exercice à la fin du chapitre : Les membres expérimentés sont encouragés à faire part de leurs commentaires aux nouveaux membres. Notez qu’il peut y avoir plus d’une réponse à un problème donné.

J’espère que vous appréciez la série Bash Basics. Dans le chapitre suivant, vous apprendrez à utiliser les boucles dans Bash. Continuez à bavarder !