fatmawati achmad zaenuri/Shutterstock
Utilisez l’instruction Linux Bash if pour créer des expressions conditionnelles avec un if
then
fi
structure. Ajouter elif
mots-clés pour des expressions conditionnelles supplémentaires, ou les else
mot-clé 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 prendre est d’utiliser un if
déclaration. Vous pourriez entendre if
déclarations appelées if then
déclarations, ou if then else
déclarations. Ce sont des noms différents pour la même chose.
Le if
déclaration 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.
Le if
est probablement le moyen le plus fréquemment utilisé pour obtenir une exécution conditionnelle. Voici comment l’utiliser dans les scripts Bash.
Un exemple simple d’instruction If
C’est la forme canonique de la plus simple if
déclaration:
if [ this-condition-is-true ] then execute-these-statements fi
Si la condition dans le texte est vraie, les lignes de script dans le then
clause sont exécutées. Si vous parcourez des scripts écrits par d’autres, vous verrez peut-être le if
énoncé écrit comme ceci :
if [ this-condition-is-true ]; then execute-these-statements fi
Quelques points à noter :
- Le
if
la déclaration est conclue par écritfi
. - Il doit y avoir un espace après la première parenthèse ”
[
” and before the second bracket ”]
» du test conditionnel. - Si vous allez mettre le
then
mot-clé sur la même ligne que le test conditionnel, assurez-vous d’utiliser un point-virgule ”;
» après l’épreuve.
Nous pouvons ajouter une option else
clause pour exécuter du code si le test de condition s’avère faux. Le else
clause n’a pas besoin d’un then
mot-clé.
if [ this-condition-is-true ] then execute-these-statements else execute-these-statements-instead fi
Ce script montre un exemple simple d’un if
déclaration qui utilise un else
clause. 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 le then
clause est exécutée. S’ils ne sont pas assez vieux, le else
clause est exécutée, et ils ne sont pas autorisés à entrer.
#!/bin/bash customer_age=25 if [ $customer_age -ge 21 ] then echo "Come on in." else echo "You can't come in." fi
Copiez le script ci-dessus dans un éditeur, enregistrez-le sous un fichier appelé « if-age.sh », et utilisez le chmod
commande pour le rendre exécutable. Vous devrez le faire avec chacun des scripts dont nous discutons.
chmod +x if-age.sh
Exécutons notre script.
./if-age.sh
Nous allons maintenant modifier le fichier et utiliser un âge inférieur à 21 ans.
customer_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
La clause elif
Le elif
La clause ajoute des tests conditionnels supplémentaires. Vous pouvez avoir autant elif
clauses comme 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 elif
tests conditionnels s’avèrent vrais, les else
clause, 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 pairnous 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 "Enter a number: " read number if [ $number -eq 0 ] then echo "You entered zero. Zero is an even number." elif [ $(($number % 2)) -eq 0 ] then echo "You entered $number. It is an even number." else echo "You entered $number. It is an odd number." 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
Tout fonctionne bien.
Différentes formes de test conditionnel
Les parenthèses » []
” que nous avons utilisé pour nos tests conditionnels est une manière abrégée d’appeler le test
programme. À cause de cela, toutes les comparaisons et tous les tests qui test
des supports sont à votre disposition if
déclaration.
C’est juste 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.
- chaîne1 = chaîne2: Vrai si chaîne1 est identique à chaîne2.
- chaîne1 != chaîne2: Vrai si chaîne1 n’est pas identique à chaîne2.
- 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 fichier: Vrai si le fichier existe avec une taille supérieure à zéro.
- -r fichier: Vrai si le fichier existe et que l’autorisation de lecture est définie.
- -w fichier: Vrai si le fichier existe et que l’autorisation d’écriture est définie.
- -x fichier: 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 les mêmes. 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 test
programme sur la ligne de commande.
test "this string" = "this string"
test "this string" = "that string"
test 1 = 001
test 1 -eq 001
Dans chaque cas, nous utilisons le echo
commande pour imprimer le code de retour de la dernière commande. Zéro signifie vrai, un signifie faux.
En utilisant le 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 le -eq
L’opérateur renvoie une vraie réponse.
Si vous souhaitez utiliser la correspondance générique dans votre test conditionnel, utilisez la double parenthèse ” [[ ]]
” syntaxe.
#!/bin/bash if [[ $USER == *ve ]] then echo "Hello $USER" else echo "$USER does not end in '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. Si ça ne se termine pas en » ve
», le script vous le dit, et se termine.
./if-wild.sh
Instructions if imbriquées
Vous pouvez mettre un if
déclaration à l’intérieur d’une autre if
déclaration.
C’est parfaitement acceptable, mais la nidification if
rend le code moins facile à lire et plus difficile à maintenir. Si vous vous retrouvez à imbriquer plus de deux ou trois niveaux de if
instructions, vous devez 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 le magasin est ouvert, le if
déclaration effectue un second test. Si le jour est le mercredi, cela nous indique qu’il est ouvert le matin uniquement.
#!/bin/bash # get the day as a number 1..7 day=$(date +"%u") if [ $day -le 6 ] then ## the shop is open if [ $day -eq 3 ] then # Wednesday is half-day echo "On Wednesdays we open in the morning only." else # regular week days and Saturday echo "We're open all day." fi else # not open on Sundays echo "It's Sunday, we're closed." fi
Copiez ce script dans un éditeur, enregistrez-le sous un fichier appelé « if-shop.sh » et rendez-le exécutable à l’aide de la commande chmod
commande.
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
Le cas pour si
L’exécution conditionnelle est ce qui donne de la puissance à la programmation et aux scripts, et l’humble 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. Le if
déclaration est excellente, mais ne la laissez pas être le seul outil dans votre sac. Consultez notamment les case
déclaration qui peut être une solution dans certains scénarios.