Bash Basics Series #7 : Déclaration If Else


  • FrançaisFrançais


  • 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 ; et then 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).

    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 :

    Exécution d'un script avec l'exemple d'instruction if dans bash

    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 :

    Exécution d'un script bash qui vérifie le nombre pair impair

    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:

    Exécution d'un script avec l'instruction bash elif

    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 :

    Exemple d'exécution d'un script bash avec des opérateurs logiques dans l'instruction if

    🏋️ 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 !

    Source

    La Rédaction

    L'équipe rédactionnnelle du site

    Pour contacter personnellement le taulier :

    Laisser un commentaire

    Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *

    Copy code