GNU/Linux >> Tutoriels Linux >  >> Linux

Comprendre Bash If Else et d'autres instructions conditionnelles

Si vous avez déjà écrit un script Bourne Again Shell (Bash), vous savez qu'ils peuvent rapidement devenir complexes à mesure que vous leur ajoutez plus de logique. Comment éviter de gâcher vos scripts ? Les instructions conditionnelles, comme Bash if else, sont un moyen d'ajouter de la logique, permettant à votre script de prendre des décisions en fonction de certaines conditions.

Dans ce didacticiel, vous apprendrez à utiliser les instructions Bash if-else et case pour écrire un script Bash sans erreur. Tout cela avec quelques bonnes pratiques pour écrire des scripts Bash.

Prêt? Continuez à lire et faites passer vos scripts Bash au niveau supérieur !

Prérequis

Ce tutoriel sera une démonstration pratique. Si vous souhaitez suivre, assurez-vous d'avoir

  • Un système Linux ou Windows avec Bash installé :le sous-système Windows pour Linux (WSL) est une excellente option pour les utilisateurs Windows.
  • Un éditeur de code/texte.

Pourquoi utiliser des instructions conditionnelles ?

Les instructions conditionnelles sont l'un des outils les plus importants dans les scripts Bash car elles vous permettent de prendre des décisions dans vos scripts en fonction de certaines conditions.

Par exemple, vous pouvez utiliser une instruction conditionnelle pour vérifier si un fichier existe avant d'essayer de le supprimer. Ou vous pouvez en utiliser un pour vérifier si un utilisateur est autorisé à accéder à une certaine ressource.

Les instructions conditionnelles rendent vos scripts plus flexibles et plus puissants. Imaginez que vous écrivez un script pour supprimer tous les fichiers d'un répertoire. Avec une instruction conditionnelle, vous pouvez supprimer des fichiers datant de plus de 30 jours.

Comprendre l'instruction IF

Assez avec l'introduction du script Bash et mettez la main à la pâte. Examinez de plus près l'une des instructions conditionnelles les plus populaires, le if déclaration.

Le if est le moyen le plus simple d'ajouter des conditions à vos scripts Bash, avec la syntaxe suivante :

  • En commençant par le mot-clé if, vous spécifiez les [[conditions]] à respecter. Le code à l'intérieur de l'instruction if s'exécute alors et l'instruction se termine par le mot-clé fi.
  • Le mot-clé then sépare la condition du code (instruction) qui s'exécutera si la condition est remplie. Ce code peut comporter plusieurs lignes si vous ajoutez un point-virgule (;) comme séparateur de ligne.
if [[ condition ]]; then
	statement
fi

Supposons que vous créez un script qui demande le nom d'utilisateur correct pour votre système avant de vous connecter :

1. Ouvrez votre terminal et créez un nouveau bash_if_demo.sh fichier à l'aide de l'éditeur de texte de votre choix.

nano bash_if_demo.sh

2. Copiez et collez le code suivant dans votre bash_if_demo.sh fichier, enregistrez les modifications et fermez le fichier.

Le code ci-dessous demande un nom d'utilisateur, et si le bon est entré, le code imprime un message de "bienvenue" avec la date et l'heure actuelles.

Vous pouvez enregistrer la date et l'heure auxquelles l'utilisateur tente d'accéder au système pour une analyse plus approfondie.

La première ligne #!/bin/bash (shebang) indique au système quel interpréteur utiliser pour exécuter le reste du code dans le fichier. Dans ce cas, vous utilisez bash.

#!/bin/bash
# Prints a question to the screen.
echo "Whats your name?"
# Reads keyboard input and stores it in the $NAME variable
read NAME
# Starts the if statement - checks to see if the $NAME variable's value 
# is equal to ATA. If it is, the code inside runs. Otherwise, the code will not run.
if [ $NAME == "ATA" ]
then
	# Prints a message to the screen, only if the value stored in the $NAME variable 
	# is equal to ATA.
  echo "Welcome back ATA!"
fi
# Prints the current date and time to the screen. Since this line is outside 
# of the if statement, it always runs regardless of the $NAME variable's value.
date

3. Enfin, exécutez la commande ci-dessous pour exécuter le script bash_if_demo.sh et voir ce qu'il fait.

bash bash_if_demo.sh

Notez que quel que soit le shell Bash que vous utilisez, vous devez ajouter bash avant le nom du script, afin que le système utilise Bash pour exécuter votre code.

Entrez ATA puis appuyez sur Entrée, et vous verrez la sortie suivante.

Vous ne recevrez pas le message de bienvenue si vous saisissez autre chose que "ATA.", uniquement la date et l'heure actuelles. Pourquoi? Parce que votre instruction if vérifie la valeur exacte comme celle stockée dans la variable $NAME.

Notez que les instructions if sont sensibles à la casse. Ainsi, "ata", "aTa", "Ata", etc., ne sont pas identiques à "ATA".

Tester votre code avec différentes entrées est une bonne pratique pour s'assurer que le code se comporte comme prévu.

Comprendre les instructions If imbriquées

Vous venez d'apprendre les bases de l'écriture d'instructions if, et c'est suffisant si vous n'écrivez pas un code complexe. Mais si vous le faites, essayez d'écrire une instruction if imbriquée pour développer vos instructions conditionnelles. Une instruction if imbriquée est une instruction if qui contient une ou plusieurs instructions if.

Vous trouverez ci-dessous la syntaxe de base des instructions if imbriquées, où :

  • if [[ conditions ]] – Le if extérieur instruction contenant du code qui ne s'exécute que si la condition est remplie. Dans ce cas, un autre if déclaration).
  • if [[ condition2 ]] – Le if intérieur instruction contenant du code qui ne s'exécute que si les deux conditions sont remplies.
if [[ conditions

]]; then
	if [[ condition2 ]]; then
		statement
	fi
fi

Remonter d'un cran le code précédent en définissant un if déclaration qui demande un mot de passe :

1. Créez un nouveau fichier appelé bash_nested_if_demo.sh avec votre éditeur de texte.

nano bash_nested_if_demo.sh

2. Remplir le code ci-dessous pour le bash_nested_if_demo.sh fichier, enregistrez les modifications et fermez le fichier.

Le code ci-dessous demande un nom et un mot de passe. Si les deux conditions sont remplies pour le nom et le mot de passe, le code imprime un message. Sinon, le code n'imprimera aucun message en dehors de la date et de l'heure actuelles.

#!/bin/bash
# Prints a message asking for a name.
echo "Whats your name?"
# Reads input from the keyboard.
read NAME
# Check if the $NAME variable's value is equal to "ATA."
if [ $NAME == "ATA" ]
 then
 # Prints a message asking for a password.
 echo "Password"
 # Reads input from the keyboard.
 read Password
   # Nested if statement - Check if the $Password variable's value equals "pwd123."
   if [ "$Password" == "pwd123" ]; then
     # Prints a message if both conditions for name and password are met.
     echo "You logged in as ATA"
   fi
fi
# Prints the current date and time
date

3. Enfin, exécutez la commande ci-dessous pour exécuter bash_nested_if_demo.sh script.

bash bash_nested_if_demo.sh

Entrez ATA pour le nom et pwd123 pour le mot de passe.

Si vous entrez autre chose que "ATA" ou "pwd123", le seul message que vous recevrez est la date et l'heure actuelles. Pourquoi? Les deux conditions de vos instructions if imbriquées doivent être remplies.

Comprendre les instructions IF ELSE

L'instruction if est un outil puissant et couramment utilisé dans les scripts Bash. Les instructions if peuvent aider à prendre des décisions dans vos scripts. Mais il convient de noter que l'utilisation des instructions if présente certains inconvénients.

Le principal inconvénient est que les instructions if peuvent rendre votre code difficile à lire et à maintenir, en particulier si vous avez imbriqué des instructions if dans d'autres instructions if. Ce style de script peut conduire à ce que l'on appelle un "code spaghetti", difficile à lire et à comprendre.

Alors, comment faire en sorte que votre code n'ait pas l'air compliqué ? Utilisez des instructions if else au lieu d'un ensemble d'instructions if imbriquées. Le mot-clé else vous permet de spécifier le code qui s'exécutera si la condition de l'instruction if n'est pas remplie.

Examinez la syntaxe de l'instruction IF ELSE ci-dessous, où :

  • if [[ conditions ]] – Le if instruction, qui contient le code (statement1 ) qui s'exécutera si la condition est remplie.
  • else – Le else instruction contient le code (statement2 ) qui s'exécutera si la condition dans le if déclaration n'est pas satisfaite.
if [[ conditions ]]; then
	statement1
else
	statement2
fi

Supposons que vous créez un jeu de nombres, qui prend un nombre aléatoire comme entrée de l'utilisateur :

1. Créez un nouveau fichier appelé bash_if_else_demo.sh.

nano bash_if_else_demo.sh

2. Ajoutez le code suivant à votre bash_if_else_demo.sh fichier, enregistrez les modifications et fermez le fichier.

Le code ci-dessous imprime un message demandant le numéro chanceux de l'utilisateur et imprime le message You Won si l'entrée de l'utilisateur est un nombre pair. Sinon (else), le code imprime le message You Lost si l'entrée de l'utilisateur est un nombre impair.

#!/bin/bash
# Prints a message asking for the user's lucky number
echo -n "Enter You Lucky Number:"
# Reads the keyboard input.
read var
# Checks if the value is an even number.
if [ $((var%2)) == 0 ]; then
 # Prints a message if the condition is met
 echo "You Won!"
else
 # Prints a message if the condition is not met
 echo "You Lost!"
fi

3. Maintenant, exécutez la commande suivante pour exécuter le script bash_if_else_demo.sh.

bash bash_if_else_demo.sh

Si vous entrez un nombre pair, le message "You Won!" impressions, comme vous pouvez le voir ci-dessous. Mais si vous entrez un nombre impair, le message "You Lost!" imprime à la place.

Essayez d'améliorer votre code en ajoutant une autre instruction qui vérifie si l'utilisateur entre une lettre d'un caractère spécial à la place.

Comprendre les déclarations de cas

Jusqu'à présent, vous avez examiné deux manières de prendre des décisions dans vos scripts Bash :if déclarations et else déclarations. Mais il existe un autre moyen de prendre des décisions dans vos scripts, le case déclaration.

Le case l'instruction est similaire au if car elle vous permet de spécifier le code qui s'exécutera en fonction d'une condition. Mais la bonne chose à propos de l'instruction case est que vous aurez une syntaxe plus précise et concise que le if imbriqué déclaration.

La syntaxe de l'instruction case est la suivante où :

  • case $VAR in – Le case instruction qui prend le $VAR la variable teste les modèles que vous spécifiez jusqu'à ce qu'une correspondance soit trouvée.
  • pattern1) et pattern2) -Les motifs à tester, qui exécutent le code (statement1 ou statement2 ) une fois qu'un motif est trouvé.
  • esac – Termine l'instruction case.
case $VAR in
pattern1)
    statement1
    ;;
pattern2)
    statement2
    ;;
esac

Supposons que vous ayez besoin d'un script qui demande aux utilisateurs de saisir le nom de leur pays et de répondre par un message indiquant la langue parlée dans ce pays.

1. Créez un nouveau fichier appelé bash_case_demo.sh.

nano bash_case_demo.sh

2. Remplissez le code ci-dessous dans bash_case_demo.sh fichier, enregistrez les modifications et fermez le fichier.

Le code ci-dessous demande à l'utilisateur un nom de pays et imprime la langue officielle de ce pays en fonction des modèles d'une instruction case.

3#!/bin/bash
# Prints a message asking for the user's country name
echo -n "Enter the Country You Live In:"
# Reads keyboard input.
read var
# Prints a message showing the official language in the user's country ($var)
# based on the pattern in the case statement.
echo -n "The official language of $var is "

# Case statement - checks if the user's input ($var) matches the patterns.
case $var in
# Define patterns that print the user's country's official language.
 US)
  echo -n "English"
  ;;

 Canada)
  echo -n "English | French"
  ;;

 Algeria | Bahrain | Egypt| Jordan)
  echo -n "Arabic"
  ;;

 *)
  echo -n "unknown"
  ;;
esac

3. Enfin, exécutez la commande suivante pour exécuter le script bash_case_demo.sh.

bash bash_case_demo.sh

Ci-dessous, vous pouvez voir que la langue officielle appropriée s'imprime en fonction du pays saisi par l'utilisateur.

Si le pays saisi ne correspond à aucun des modèles, le modèle par défaut (*) est utilisé et le message inconnu s'imprime.

Conclusion

Dans ce didacticiel, vous avez fait vos premiers pas dans l'apprentissage de l'utilisation des instructions conditionnelles dans Bash. Vous avez appris à simplifier le code complexe avec l'instruction Bash if, l'instruction if-else et l'instruction case.

Vous êtes maintenant suffisamment confiant pour utiliser des instructions conditionnelles pour écrire des scripts Bash plus efficacement et avec moins d'erreurs.

Mais ne vous arrêtez pas là ! Il y a plus de choses que les instructions conditionnelles dans Bash peuvent offrir. Commencez peut-être à en apprendre davantage sur l'instruction Bash elif et &&, OR et || les opérateurs? Avec un peu de pratique, vous écrirez des scripts Bash comme un pro en un rien de temps !


Linux
  1. Comment utiliser l'instruction conditionnelle if else dans le script bash

  2. 2>&1 et comprendre les autres idiomes du script shell

  3. Comprendre Tc Qdisc et Iperf ?

  4. 4 Exemples d'instructions Bash If ( If then fi, If then else fi, If elif else fi, Nested if )

  5. Instruction Bash/sh 'if else'

Commande de sortie Bash et codes de sortie

Script Bash - Instructions conditionnelles

Bash Scripting - Déclaration de cas

Comment utiliser les instructions conditionnelles dans les scripts Bash

Syntaxe Bash If Else avec exemples

Bash Beginner Series #7 :Prise de décision avec des instructions If Else et Case Statements