Comment utiliser les instructions Bash If (avec 4 exemples)
Publié: 2023-05-08if
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.
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 écrivantfi
. - 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
Exécutons notre script.
./if-age.sh
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
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
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.
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
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
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