GNU/Linux >> Tutoriels Linux >  >> Linux

Script Bash - Instructions conditionnelles

Dans ce guide, nous apprendrons l'utilisation des instructions conditionnelles dans les scripts Bash avec des exemples. La prise de décision est une étape importante de la programmation. Il peut y avoir une situation où certaines conditions doivent être remplies et sur cette base, vous devez écrire une logique. C'est ce que fait une instruction conditionnelle. Les instructions conditionnelles vous permettent d'écrire une logique et de prendre des décisions. Le concept que vous lisez ici sera le même pour tous les langages de programmation, mais avec des différences de syntaxe et d'implémentation.

Syntaxe des instructions conditionnelles

Le bloc de construction de l'instruction conditionnelle dans bash est le suivant.

if [[ conditions ]]
then
   code
elif [[ conditions ]]
then
   code
else
   code
fi

Explication du code :

  1. Les mots-clés "if" et "fi" marquer le début et la fin de l'instruction conditionnelle. Chaque instruction if doit être suivie du "then" mot-clé.
  2. Soit [[ ]] ou [ ] doit être utilisé pour évaluer l'état. Si la condition est évaluée à "True" , alors un bloc de code sera exécuté.
  3. Une instruction conditionnelle peut avoir une condition if et plusieurs elif conditions. Si une condition est évaluée comme vraie, toutes les instructions conditionnelles suivantes sont ignorées.
  4. Si tous les if ou elif le bloc est évalué comme étant faux puis le bloc de code du "else" clause sera exécutée.
  5. Bien qu'il n'y ait pas de règles d'indentation strictes, laissez 2 espaces pour le bloc de code, ce qui donnera une meilleure lisibilité.

Pour évaluer les conditions, bash a une commande intégrée appelée "test" . Les crochets sont identiques à la commande de test, vous pouvez donc utiliser la commande de test ou les crochets.

$ type -a test
test is a shell builtin
test is /usr/bin/test
test is /bin/test

Il existe un tas d'opérateurs pris en charge par le test pour évaluer les conditions et nous verrons comment utiliser ces opérateurs dans la prochaine section. Pour obtenir la liste des opérateurs, vous pouvez exécuter l'une des commandes ci-dessous.

$ man test
$ help test

Opérateurs de test de fichiers

Les opérateurs de test de fichier peuvent être utilisés pour travailler avec des objets de fichier ou de répertoire. À l'aide d'opérateurs de test de fichiers, vous pouvez valider si un fichier ou un répertoire donné est présent ou non, un objet donné est un fichier ou un répertoire, le type de fichier avec lequel vous traitez, la taille du fichier, etc. Exécutez la commande suivante et recherchez la section opérateur de fichier.

$ man test

Tous les opérateurs ne sont pas utilisés fréquemment, mais je vais vous présenter les plus importants.

Pour vérifier si un fichier donné est présent ou non, utilisez le -e drapeau. Ici, je vérifie si le .bashrc le fichier est présent ou non dans mon répertoire personnel.

if [[ -e /home/${USER}/.bashrc ]]
then
  echo "File is present"
else
  echo "File is not present"
fi

Pour vérifier si un répertoire donné est présent ou non, utilisez le -d drapeau. Ici, je vérifie le bureau répertoire dans mon dossier personnel.

if [[ -d ~/Desktop/ ]]
then
  echo "Directory is present"
else
  echo "Directory is not present"
fi

Pour vérifier si le fichier est de taille non nulle fichier, utilisez le -s drapeau. Ici, j'ai créé un fichier nommé "zero_byte.txt" et ajouté du texte.

$ touch ~/Desktop/zero_byte.txt
$ echo "Writing something" >> ~/Desktop/zero_byte.txt
$ if [[ -s ~/Desktop/zero_byte.txt ]]
then
  echo "File is not zero byte"
else
  echo "File is zero byte"
fi

Vous pouvez utiliser ! symbole avec tous les drapeaux qui inverseront le résultat. J'utilise le même exemple que ci-dessus mais avec "!" symbole. Il inversera et imprimera le fichier en tant que fichier de zéro octet, même si ce n'est pas le cas.

$ if [[ ! -s ~/Desktop/zero_byte.txt ]]
then
  echo "File is not zero byte"
else
  echo "File is zero byte"
fi

Opérateurs de comparaison d'entiers

Vous trouverez ci-dessous les opérateurs de comparaison d'entiers qui seront évalués par rapport à deux entiers donnés.

-eq => Integer X is equal to Integer Y
-ne => Integer X is not equal to Integer Y
-gt => Integer X is greater than Integer Y
-ge => Integer X is greater than or equal to Integer Y
-lt => Integer X is lesser than Integer Y
-le => Integer X is lesser than or equal to Integer Y

Chaque commande bash renvoie un code de sortie entre 0-255 et nous utiliserons les opérateurs de comparaison Integer pour évaluer les codes de sortie. Dans l'exemple ci-dessous, j'attribue le code de sortie du nvim commande à une variable appelée EXCODE et faire la comparaison d'entiers. Puisque neovim n'est pas disponible, il lancera le code de sortie 127 (erreur de commande introuvable).

$ EXCODE=$(nvim;echo $?)
$ if [[ $EXCODE -eq 0 ]]
then      
  echo "nvim is available to use"
elif [[ $EXCODE -eq 127 ]]
then
  echo "Command not found, check if nvim is installed or not"
else     
   echo "Return code is other than 0 & 127. Check and fix the error"
fi

Dans l'exemple ci-dessus, j'ai utilisé le elif déclaration pour la première déclaration de cet article. D'abord le "if" la condition est évaluée pour vérifier si le code de retour est zéro, ce qui renvoie faux, puis le contrôle est passé à elif instruction et la condition est évaluée à true et exécute le bloc de code. Vous pouvez ajouter autant de elif déclaration pour évaluer différentes conditions.

Vous pouvez également évaluer plusieurs conditions dans un seul if ou elif instruction utilisant l'opérateur logique AND, OR.

LOGICAL AND ⇒ && symbol => All the conditions should be evaluated to be true.
LOGICAL OR ⇒ || symbol => Anyone condition should be evaluated to be true.

Vous trouverez ci-dessous un exemple de ET logique opérateur où l'entier stocké dans les variables X et O sont évalués comme étant vrais .

$ X=10
$ Y=15
$ if [[ $X -eq 10 && $Y -eq 15 ]]
then
  echo "ok to proceed"
else
  echo "Not ok to proceed"
fi

Ci-dessous l'exemple d'un OU logique opérateur où variable X est évalué comme étant vrai et variable Y est évalué comme étant faux .

$ X=10
$ Y=15
$ if [[ $X -eq 10 || $Y -eq 10 ]]
then
  echo "ok to proceed"
else
  echo "Not ok to proceed"
fi

Instructions conditionnelles compactes

Si vous devez simplement écrire un if et else déclaration, vous pouvez utiliser la méthode abrégée. De manière abrégée, il n'est pas nécessaire d'utiliser if..then..else..fi mots clés. Vous pouvez utiliser le ET logique (&& ) et OU logique (|| ) opérateurs.

[[ condition ]] && << run if condition is evaluated to true >> || << run if condition is evaluated to false >>

Jetez un oeil à l'exemple ci-dessous. J'essaie de vérifier si le paquet neofetch est disponible et s'il n'est pas disponible, essayez de l'installer.

$ which neofetch && echo "Neofetch already installed" || sudo apt install neofetch -y

Explication du code :

  • Il exécutera le "which neofetch" commande et si le code de retour est zéro alors tout ce qui vient après && l'opérateur s'exécutera.
  • Si le code de retour est supérieur à zéro (évalué à faux), tout ce qui vient après || l'opérateur s'exécutera.
  • Ceci est similaire au if et else déclaration. Le "If" L'instruction ne s'exécutera que si la condition est évaluée comme étant vraie. Dans ce cas, c'est ET opérateur. De même, la clause else ne s'exécutera que lorsque "if" condition est évaluée à fausse. Dans ce cas, c'est OU opérateur.
  • Sur ma machine, neofetch est déjà installé, donc le code de sortie sera zéro. Il exécutera le echo commande. Si le neofetch n'est pas installé, il exécutera le apt install commande.

Vous trouverez ci-dessous un autre exemple où j'utilise l'opérateur de test de fichier pour vérifier si un fichier contient zéro octet ou non.

$ [[ -s ~/.bashrc ]] && echo "Not a empty file" || echo "Empty file"

Opérateurs de comparaison de chaînes

Comme Entier et Fichier opérateurs de test, nous avons un ensemble d'opérateurs pour travailler avec des chaînes. Vous trouverez ci-dessous l'ensemble important d'opérateurs de chaîne.

-z => Check if string is NULL.
-n => Check if string is not NULL.
== => Check for string equality.
!= => Check for string inequality.

Pour vérifier si la chaîne est NULL ou non NULL, utilisez le -z et -n drapeau. J'utilise la syntaxe d'instruction conditionnelle compacte pour évaluer la condition.

$ [[ -z "Howdy" ]] && echo "String is NULL" || echo "String is not NULL"
$ [[ -n "Howdy" ]] && echo "String is not NULL" || echo "String is NULL"

Pour vérifier si deux chaînes sont égales, utilisez == opérateur. Les chaînes sont sensibles à la casse, vous devez donc exécuter la comparaison en gardant ce point à l'esprit.

$ X="Linux"
$ Y="Linux"
$ [[ $X == $Y ]] && echo "Equal" || echo "Not equal"

Pour vérifier si deux chaînes ne sont pas égales, utilisez != opérateur.

$ [[ $X != $Y ]] && echo "Not Equal" || echo "Equal"

Conclusion

Dans cet article, nous avons vu comment travailler avec des instructions conditionnelles dans bash. Nous avons également vu comment utiliser les opérateurs de test de fichier, d'entier et de chaîne. Enfin, nous avons expliqué comment écrire des instructions conditionnelles compactes à l'aide des opérateurs logiques ET et OU logiques avec des exemples.

Pour tout commentaire ou suggestion, veuillez utiliser la section des commentaires et nous serons heureux de revenir en arrière.

Guides de script bash :

  • Scripts bash – Manipulation de chaînes
  • Scripts bash – Explication de la commande Printf à l'aide d'exemples
  • Scripts bash – Tableau indexé expliqué à l'aide d'exemples
  • Scripts bash - Tableau associatif expliqué avec des exemples
  • Scripts bash – Explication de la boucle For avec des exemples
  • Scripts bash :boucle While et Until expliquée à l'aide d'exemples
  • La redirection bash expliquée avec des exemples
  • Scripts bash – Variables expliquées à l'aide d'exemples
  • Scripts bash – Fonctions expliquées à l'aide d'exemples
  • La commande Bash Echo expliquée avec des exemples sous Linux
  • Tutoriel Bash Heredoc pour les débutants

Linux
  1. Comment vérifier si un fichier ou un répertoire existe dans Bash

  2. Bash :Écrire dans un fichier

  3. Script bash (I)

  4. La fête ?

  5. Impossible d'exécuter des scripts bash même en tant que root ?

Script bash :comment lire des données à partir de fichiers texte

Script bash (II)

Script bash (III)

Déclarations Bash If-Else - Tout ce que vous devez savoir sur

Bash Beginner Series #5 :Utilisation des opérateurs arithmétiques dans les scripts Bash

Comprendre Bash If Else et d'autres instructions conditionnelles