in

Comment utiliser les instructions Bash If (avec 4 exemples)

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 écrit fi.
  • 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

Utiliser chmod pour rendre un script exécutable

Exécutons notre script.

./if-age.sh

Exécution du script if-age.sh avec la variable d'âge définie sur 25

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

Exécution du script if-age.sh avec la variable d'âge définie sur 18

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

Exécution du script if-even.sh avec diverses entrées

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.

Utilisation du programme de test sur la ligne de commande pour tester différentes comparaisons

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

Exécution du script if-wild.sh montrant la recherche de caractères génériques dans le test conditionnel de l'instruction if

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

Exécution du script if-shop.sh avec l'horloge de l'ordinateur réglée sur un jour de la semaine, puis un mercredi, puis un dimanche

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.

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Le client de bureau de Steam vient de recevoir une grosse mise à jour (en version bêta)

Le client de bureau de Steam vient de recevoir une grosse mise à jour (en version bêta)

Qu’est-ce que NVIDIA Image Scaling et comment l’utilisez-vous ?