Ce tutoriel vous guidera à travers les bases du Bash if Statement et vous montrer comment l'utiliser dans vos scripts shell.
La prise de décision est l'un des concepts les plus fondamentaux de la programmation informatique. Comme dans tout autre langage de programmation, if , if..else , if..elif..else , et if imbriqué les instructions dans Bash sont utilisées pour exécuter du code basé sur une certaine condition.
if Relevé #
Bash if les conditionnels peuvent avoir différentes formes. Le if le plus basique déclaration prend la forme suivante :
if TEST-COMMAND
then
STATEMENTS
fi
Le if l'instruction commence par if mot-clé suivi de l'expression conditionnelle et de then mot-clé. L'instruction se termine par le fi mot-clé.
Si la TEST-COMMAND est évalué à True , les STATEMENTS se fait exécuter. Si TEST-COMMAND renvoie False , il ne se passe rien; les STATEMENTS être ignoré.
En général, il est recommandé de toujours indenter votre code et de séparer les blocs de code par des lignes vides. La plupart des gens choisissent d'utiliser une indentation à 4 ou 2 espaces. Les indentations et les lignes vides rendent votre code plus lisible et organisé.
Regardons l'exemple de script suivant qui vérifie si un nombre donné est supérieur à 10 :
#!/bin/bash
echo -n "Enter a number: "
read VAR
if [[ $VAR -gt 10 ]]
then
echo "The variable is greater than 10."
fi
Enregistrez le code dans un fichier et exécutez-le depuis la ligne de commande :
bash test.sh
Le script vous demandera d'entrer un nombre. Si, par exemple, vous entrez 15, le test la commande sera évaluée à true car 15 est supérieur à 10, et le echo commande à l'intérieur du then clause sera exécutée.
The variable is greater than 10.
if..else Relevé #
Le Bash if..else déclaration prend la forme suivante :
if TEST-COMMAND
then
STATEMENTS1
else
STATEMENTS2
fi
Si la TEST-COMMAND est évalué à True , le STATEMENTS1 sera exécuté. Sinon, si TEST-COMMAND renvoie False , le STATEMENTS2 sera exécuté. Vous ne pouvez avoir qu'un seul else clause dans la déclaration.
Ajoutons un else clause à l'exemple de script précédent :
#!/bin/bash
echo -n "Enter a number: "
read VAR
if [[ $VAR -gt 10 ]]
then
echo "The variable is greater than 10."
else
echo "The variable is equal or less than 10."
fi
Si vous exécutez le code et entrez un nombre, le script imprimera un message différent selon que le nombre est supérieur ou inférieur/égal à 10.
if..elif..else Relevé #
Le Bash if..elif..else déclaration prend la forme suivante :
if TEST-COMMAND1
then
STATEMENTS1
elif TEST-COMMAND2
then
STATEMENTS2
else
STATEMENTS3
fi
Si la TEST-COMMAND1 est évalué à True , le STATEMENTS1 sera exécuté. Si la TEST-COMMAND2 est évalué à True , le STATEMENTS2 sera exécuté. Si aucune des commandes de test n'a la valeur True , le STATEMENTS2 est exécuté.
Vous pouvez avoir un ou plusieurs elif clauses dans la déclaration. Le else clause est facultative.
Les conditions sont évaluées séquentiellement. Une fois qu'une condition renvoie True , les conditions restantes ne sont pas exécutées et le contrôle du programme se déplace à la fin du if déclarations.
Ajoutons un elif clause au script précédent :
#!/bin/bash
echo -n "Enter a number: "
read VAR
if [[ $VAR -gt 10 ]]
then
echo "The variable is greater than 10."
elif [[ $VAR -eq 10 ]]
then
echo "The variable is equal to 10."
else
echo "The variable is less than 10."
fi
if imbriqué Relevés #
Bash vous permet d'imbriquer if déclarations dans if déclarations. Vous pouvez placer plusieurs if déclarations à l'intérieur d'un autre if déclaration.
Le script suivant vous demandera d'entrer trois nombres et d'imprimer le plus grand nombre parmi les trois nombres.
#!/bin/bash
echo -n "Enter the first number: "
read VAR1
echo -n "Enter the second number: "
read VAR2
echo -n "Enter the third number: "
read VAR3
if [[ $VAR1 -ge $VAR2 ]]
then
if [[ $VAR1 -ge $VAR3 ]]
then
echo "$VAR1 is the largest number."
else
echo "$VAR3 is the largest number."
fi
else
if [[ $VAR2 -ge $VAR3 ]]
then
echo "$VAR2 is the largest number."
else
echo "$VAR3 is the largest number."
fi
fi
Voici à quoi ressemblera la sortie :
Enter the first number: 4
Enter the second number: 7
Enter the third number: 2
7 is the largest number.
Généralement, il est plus efficace d'utiliser le case déclaration au lieu de if imbriqué déclarations. Plusieurs conditions #
Le OR logique et AND les opérateurs vous permettent d'utiliser plusieurs conditions dans le if déclarations.
Voici une autre version du script pour imprimer le plus grand nombre parmi les trois nombres. Dans cette version, au lieu du if imbriqué instructions, nous utilisons le AND logique (&& ) opérateur.
#!/bin/bash
echo -n "Enter the first number: "
read VAR1
echo -n "Enter the second number: "
read VAR2
echo -n "Enter the third number: "
read VAR3
if [[ $VAR1 -ge $VAR2 ]] && [[ $VAR1 -ge $VAR3 ]]
then
echo "$VAR1 is the largest number."
elif [[ $VAR2 -ge $VAR1 ]] && [[ $VAR2 -ge $VAR3 ]]
then
echo "$VAR2 is the largest number."
else
echo "$VAR3 is the largest number."
fi
Opérateurs de test #
Dans Bash, le test commande prend l'une des formes de syntaxe suivantes :
test EXPRESSION
[ EXPRESSION ]
[[ EXPRESSION ]]
Pour rendre le script portable, préférez utiliser l'ancien test [ , qui est disponible sur tous les shells POSIX. La nouvelle version mise à jour du test commande [[ (double crochets) est pris en charge sur la plupart des systèmes modernes utilisant Bash, Zsh et Ksh comme shell par défaut.
Pour annuler l'expression de test, utilisez le NOT logique (! ) opérateur. Lorsque vous comparez des chaînes, utilisez toujours des guillemets simples ou doubles pour éviter les problèmes de division et de globalisation des mots.
Voici quelques-uns des opérateurs les plus couramment utilisés :
-nVAR- Vrai si la longueur deVARest supérieur à zéro.-zVAR- Vrai si laVARest vide.STRING1 = STRING2- Vrai siSTRING1etSTRING2sont égaux.STRING1 != STRING2- Vrai siSTRING1etSTRING2ne sont pas égaux.INTEGER1 -eq INTEGER2- Vrai siINTEGER1etINTEGER2sont égaux.INTEGER1 -gt INTEGER2- Vrai siINTEGER1est supérieur àINTEGER2.INTEGER1 -lt INTEGER2- Vrai siINTEGER1est inférieur àINTEGER2.INTEGER1 -ge INTEGER2- Vrai siINTEGER1est égal ou supérieur à INTEGER2.INTEGER1 -le INTEGER2- Vrai siINTEGER1est égal ou inférieur àINTEGER2.-hFILE- Vrai si leFILEexiste et est un lien symbolique.-rFILE- Vrai si leFILEexiste et est lisible.-wFILE- Vrai si leFILEexiste et est accessible en écriture.-xFILE- Vrai si leFILEexiste et est exécutable.-dFILE- Vrai si leFILEexiste et est un répertoire.-eFILE- Vrai si leFILEexiste et est un fichier, quel que soit son type (nœud, répertoire, socket, etc.).-fFILE- Vrai si leFILEexiste et est un fichier normal (pas un répertoire ou un périphérique).
Conclusion #
Le if , if..else et if..elif..else vous permettent de contrôler le flux d'exécution du script Bash en évaluant des conditions données.
Si vous avez des questions ou des commentaires, n'hésitez pas à laisser un commentaire.