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 :
-n
VAR
- Vrai si la longueur deVAR
est supérieur à zéro.-z
VAR
- Vrai si laVAR
est vide.STRING1 = STRING2
- Vrai siSTRING1
etSTRING2
sont égaux.STRING1 != STRING2
- Vrai siSTRING1
etSTRING2
ne sont pas égaux.INTEGER1 -eq INTEGER2
- Vrai siINTEGER1
etINTEGER2
sont égaux.INTEGER1 -gt INTEGER2
- Vrai siINTEGER1
est supérieur àINTEGER2
.INTEGER1 -lt INTEGER2
- Vrai siINTEGER1
est inférieur àINTEGER2
.INTEGER1 -ge INTEGER2
- Vrai siINTEGER1
est égal ou supérieur à INTEGER2.INTEGER1 -le INTEGER2
- Vrai siINTEGER1
est égal ou inférieur àINTEGER2
.-h
FILE
- Vrai si leFILE
existe et est un lien symbolique.-r
FILE
- Vrai si leFILE
existe et est lisible.-w
FILE
- Vrai si leFILE
existe et est accessible en écriture.-x
FILE
- Vrai si leFILE
existe et est exécutable.-d
FILE
- Vrai si leFILE
existe et est un répertoire.-e
FILE
- Vrai si leFILE
existe et est un fichier, quel que soit son type (nœud, répertoire, socket, etc.).-f
FILE
- Vrai si leFILE
existe 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.