Comment utiliser les instructions Bash If (avec 4 exemples)

Publié: 2023-05-08
Ordinateur portable Linux affichant une fenêtre de terminal avec un motif de globe en arrière-plan et un filigrane binaire
fatmawati achmad zaenuri/Shutterstock
Utilisez l'instruction Linux Bash if pour créer des expressions conditionnelles avec une structure if then fi . Ajoutez des mots-clés elif pour des expressions conditionnelles supplémentaires, ou le mot-clé else pour définir une section fourre-tout de code qui est exécutée si aucune clause conditionnelle précédente n'a été exécutée.

Tous les scripts Bash non triviaux doivent prendre des décisions. L'instruction Bash if permet à votre script Linux de poser des questions et, en fonction de la réponse, d'exécuter différentes sections de code. Voici comment ils fonctionnent.

Qu'est-ce que l'exécution conditionnelle ?

Dans tous les scripts Bash, sauf les plus triviaux, il est généralement nécessaire que le flux d'exécution emprunte un chemin différent à travers le script, en fonction du résultat d'une décision. C'est ce qu'on appelle l'exécution conditionnelle.

Une façon de décider quelle branche d'exécution utiliser est d'utiliser une instruction if . Vous pouvez entendre des instructions if appelées des instructions if then ou des instructions if then else . Ce sont des noms différents pour la même chose.

9 exemples de boucles for dans les scripts Linux Bash
CONNEXION 9 Exemples de boucles for dans les scripts Linux Bash

L'instruction if dit que si quelque chose est vrai, alors faites ceci . Mais si quelque chose est faux, faites- le à la place. Le "quelque chose" peut être plusieurs choses, telles que la valeur d'une variable, la présence d'un fichier ou si deux chaînes correspondent.

L'exécution conditionnelle est vitale pour tout script significatif. Sans cela, vous êtes très limité dans ce que vous pouvez faire faire à votre script. À moins qu'il ne puisse prendre des décisions significatives, vous ne pourrez pas résoudre les problèmes du monde réel et produire des solutions viables.

L'instruction if est probablement le moyen le plus fréquemment utilisé pour obtenir une exécution conditionnelle. Voici comment l'utiliser dans les scripts Bash.

CONNEXION: Comment vérifier si un fichier existe dans les scripts Linux Bash

Un exemple simple d'instruction If

C'est la forme canonique de l'instruction if la plus simple :

 si [ cette-condition-est-vraie ]
alors
  exécuter-ces-instructions
Fi

Si la condition dans le texte est vraie, les lignes de script de la clause then sont exécutées. Si vous parcourez des scripts écrits par d'autres, vous pouvez voir l'instruction if écrite comme ceci :

 si [ cette-condition-est-vraie ] ; alors
  exécuter-ces-instructions
Fi

Quelques points à noter :

  • L'instruction if se conclut en écrivant fi .
  • Il doit y avoir un espace après la première parenthèse ” [ ” et avant la deuxième parenthèse ” ] ” du test conditionnel.
  • Si vous allez mettre le mot-clé then sur la même ligne que le test conditionnel, assurez-vous d'utiliser un point-virgule ” ; » après l'épreuve.

Nous pouvons ajouter une clause else facultative pour exécuter du code si le test de condition s'avère faux. La clause else n'a pas besoin d'un mot-clé then .

 si [ cette-condition-est-vraie ]
alors
  exécuter-ces-instructions
autre
  exécutez-ces-instructions-à la place
Fi

Ce script montre un exemple simple d'une instruction if qui utilise une clause else . Le test conditionnel vérifie si l'âge du client est supérieur ou égal à 21 ans. Si c'est le cas, le client peut entrer dans les locaux, et la clause then est exécutée. S'ils ne sont pas assez âgés, la clause else est exécutée et ils ne sont pas autorisés à entrer.

 #!/bin/bash

âge_client=25

si [ $âge_client -ge 21 ]
alors
  echo "Entrez."
autre
  echo "Vous ne pouvez pas entrer."
Fi

Copiez le script ci-dessus dans un éditeur, enregistrez-le dans un fichier appelé "if-age.sh" et utilisez la commande chmod pour le rendre exécutable. Vous devrez le faire avec chacun des scripts dont nous discutons.

 chmod +x si-age.sh 

Utiliser chmod pour rendre un script exécutable

Exécutons notre script.

 ./if-age.sh 

Exécution du script if-age.sh avec la variable d'âge définie sur 25

Nous allons maintenant modifier le fichier et utiliser un âge inférieur à 21 ans.

 client_age=18

Apportez cette modification à votre script et enregistrez vos modifications. Si nous l'exécutons maintenant, la condition renvoie false et la clause else est exécutée.

 ./if-age.sh 

Exécution du script if-age.sh avec la variable d'âge définie sur 18

La clause elif

La clause elif ajoute des tests conditionnels supplémentaires. Vous pouvez avoir autant de clauses elif que vous le souhaitez. Ils sont évalués à tour de rôle jusqu'à ce que l'un d'entre eux s'avère vrai. Si aucun des tests conditionnels elif ne s'avère vrai, la clause else , si elle est présente, est exécutée.

Ce script demande un nombre puis vous indique s'il est pair ou impair. Zéro est un nombre pair, nous n'avons donc pas besoin de tester quoi que ce soit.

Tous les autres nombres sont testés en trouvant le modulo d'une division par deux. Dans notre cas, le modulo est la partie fractionnaire du résultat d'une division par deux. S'il n'y a pas de partie fractionnaire, le nombre est divisible par deux, exactement. C'est donc un nombre pair.

 #!/bin/bash

echo -n "Entrez un nombre : "

lire le numéro

si [ $nombre -eq 0 ]
alors
  echo "Vous avez entré zéro. Zéro est un nombre pair."
elif [ $(($nombre % 2)) -eq 0 ]
alors
  echo "Vous avez entré $nombre. C'est un nombre pair."
autre
  echo "Vous avez entré $nombre. C'est un nombre impair."
Fi

Pour exécuter ce script, copiez-le dans un éditeur et enregistrez-le sous "if-even.sh", puis utilisez chmod pour le rendre exécutable.

Exécutons le script plusieurs fois et vérifions sa sortie.

 ./if-even.sh 

Exécution du script if-even.sh avec diverses entrées

Tout fonctionne bien.

Différentes formes de test conditionnel

Les crochets " [] " que nous avons utilisés pour nos tests conditionnels sont une manière abrégée d'appeler le programme test . Pour cette raison, toutes les comparaisons et tous les tests pris en charge par test sont disponibles pour votre instruction if .

Voici quelques-uns d'entre eux :

  • ! expression : Vrai si l'expression est fausse.
  • -n chaîne : Vrai si la longueur de la chaîne est supérieure à zéro.
  • -z chaîne : Vrai si la longueur de la chaîne est nulle. Autrement dit, c'est une chaîne vide.
  • string1 = string2 : Vrai si string1 est identique à string2.
  • string1 != string2 : Vrai si string1 n'est pas identique à string2.
  • entier1 -eq entier2 : Vrai si entier1 est numériquement égal à entier2
  • entier1 -qt entier2 : Vrai si entier1 est numériquement supérieur à entier2
  • entier1 -lt entier2 : Vrai si entier1 est numériquement inférieur à entier2
  • -d répertoire : Vrai si le répertoire existe.
  • -e fichier : Vrai si le fichier existe.
  • -s file : Vrai si le fichier existe avec une taille supérieure à zéro.
  • -r file : Vrai si le fichier existe et que l'autorisation de lecture est définie.
  • -w file : Vrai si le fichier existe et que l'autorisation d'écriture est définie.
  • -x file : Vrai si le fichier existe et que l'autorisation d'exécution est définie.

Dans le tableau, "fichier" et "répertoire" peuvent inclure des chemins de répertoire, relatifs ou absolus.

Le signe égal « = » et le test d'égalité -eq ne sont pas identiques. Le signe égal effectue une comparaison de texte caractère par caractère . Le test d'égalité effectue une comparaison numérique .

Nous pouvons le voir en utilisant le programme test sur la ligne de commande.

 test "cette chaîne" = "cette chaîne"
 test "cette chaîne" = "cette chaîne"
 essai 1 = 001
 essai 1 -eq 001

Dans chaque cas, nous utilisons la commande echo pour imprimer le code de retour de la dernière commande. Zéro signifie vrai, un signifie faux.

Utilisation du programme de test sur la ligne de commande pour tester différentes comparaisons

L'utilisation du signe égal " = " nous donne une fausse réponse en comparant 1 à 001. C'est exact, car ce sont deux chaînes de caractères différentes. Numériquement, ils ont la même valeur (un), donc l'opérateur -eq renvoie une vraie réponse.

Si vous souhaitez utiliser la correspondance générique dans votre test conditionnel, utilisez la syntaxe à double crochet ” [[ ]] ”.

 #!/bin/bash

si [[ $USER == *ve ]]
alors
  echo "Bonjour $USER"
autre
  echo "$USER ne se termine pas par 've'"
Fi

Ce script vérifie le nom de compte de l'utilisateur actuel. S'il se termine par « ve », il imprime le nom d'utilisateur. S'il ne se termine pas par « ve », le script vous le dit et se termine.

 ./if-wild.sh 

Exécution du script if-wild.sh montrant la recherche de caractères génériques dans le test conditionnel de l'instruction if

CONNEXION : Tests conditionnels dans Bash : si, alors, sinon, elif

Instructions if imbriquées

Vous pouvez placer une instruction if dans une autre instruction if .

C'est parfaitement acceptable, mais l'imbrication des instructions if rend le code moins facile à lire et plus difficile à maintenir. Si vous vous retrouvez à imbriquer plus de deux ou trois niveaux d'instructions if , vous devrez probablement réorganiser la logique de votre script.

Voici un script qui obtient le jour sous forme de nombre, de un à sept. Un est lundi, sept est dimanche.

Il nous indique les heures d'ouverture d'un magasin. Si c'est un jour de semaine ou un samedi, il signale que le magasin est ouvert. Si c'est un dimanche, il signale que le magasin est fermé.

Si la boutique est ouverte, l'instruction if imbriquée effectue un second test. Si le jour est le mercredi, cela nous indique qu'il est ouvert le matin uniquement.

 #!/bin/bash

# obtenir le jour sous la forme d'un nombre 1..7
jour=$(date +"%u")

si [ $jour -le 6 ]
alors
  ## la boutique est ouverte
  si [ $jour -eq 3 ]
  alors
    # Le mercredi est une demi-journée
    echo "Le mercredi, nous ouvrons le matin uniquement."
  autre
    # jours de semaine réguliers et samedi
   echo "Nous sommes ouverts toute la journée."
  Fi
autre
  # pas ouvert le dimanche
  echo "C'est dimanche, nous sommes fermés."
Fi

Copiez ce script dans un éditeur, enregistrez-le dans un fichier appelé "if-shop.sh" et rendez-le exécutable à l'aide de la commande chmod .

Nous avons exécuté le script une fois, puis changé l'horloge de l'ordinateur pour qu'elle soit un mercredi, et réexécuté le script. Nous avons ensuite changé le jour en dimanche et l'avons exécuté une fois de plus.

 ./if-shop.sh
 ./if-shop.sh
 ./if-shop.sh 

Exécution du script if-shop.sh avec l'horloge de l'ordinateur réglée sur un jour de la semaine, puis un mercredi, puis un dimanche

CONNEXION: Comment utiliser les tests conditionnels à double crochet sous Linux

Le cas Pour si

L'exécution conditionnelle est ce qui apporte de la puissance à la programmation et aux scripts, et l'humble instruction if pourrait bien être le moyen le plus couramment utilisé pour changer le chemin d'exécution dans le code. Mais cela ne signifie pas que c'est toujours la réponse.

Écrire un bon code signifie savoir quelles options vous avez et lesquelles sont les meilleures à utiliser pour résoudre une exigence particulière. L'instruction if est excellente, mais ne la laissez pas être le seul outil dans votre sac. En particulier, consultez la déclaration case qui peut être une solution dans certains scénarios.

CONNEXION: Comment utiliser les instructions de cas dans les scripts Bash