Comment utiliser les instructions Bash If (avec 4 exemples)
Publié: 2023-05-08
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.
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
ifse 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é
thensur 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

