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 :
- 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é. - Soit
[[ ]]
ou[ ]
doit être utilisé pour évaluer l'état. Si la condition est évaluée à "True" , alors un bloc de code sera exécuté. - 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. - Si tous les
if
ouelif
le bloc est évalué comme étant faux puis le bloc de code du"else"
clause sera exécutée. - 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
etelse
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 leapt 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