Lorsque l’on début en script bash, les premières étapes consistent à apprendre à utiliser des instructions conditionnelles dans vos scripts bash pour qu’ils se comportent différemment dans différents scénarios et cas.
De cette façon, vous pouvez créer des scripts bash beaucoup plus efficaces et vous pouvez également implémenter le contrôle des erreurs dans vos scripts.
Dans ce tutoriel, je vous explique comment utiliser les déclarations if, then en Bash Linux avec de nombreux exemples de syntaxes, utilisations et la liste des opérateurs.
Table des matières
Quelle est la syntaxe de if, then en bash Linux
Structure de if/then
La première chose à comprendre pour utiliser if et then sont les différentes syntaxes possibles.
Voici la syntaxe la plus basique de if et then :
if <commande>
then
<commandes>
fi
Chaque mot-clé a une fonction spécifique :
- if signale le début de l’instruction. La commande juste après est celle dans laquelle la vérification de l’état de sortie s’applique
- then exécute les commandes uniquement si l’examen précédent se termine avec succès
- fi ferme l’instruction if
Vous pouvez aussi condenser if/then en une seule ligne, ce qui permet de l’utiliser directement dans le terminal et non dans un script bash, avec la syntaxe suivante :
if <commande>; then <commandes>; fi
Pour ajouter un nouveau test, ajoutez une instruction else :
if <commande>
then
<commandes>
else
<commandes>
fi
Ce qui nous donne ceci sur une seule ligne :
if <commande>; then ; <commandes>; else <commandes>; fi
Vous pouvez utiliser une instruction elif (else-if) lorsque vous souhaitez tester plusieurs expressions (conditions) en même temps.
if <commande>
then
<commande>
elif <commande>
then
<commande>
else
echo <commande>
fi
Enfin l’imbrication de if est tout à fait possible. Par exemple un double if :
if <commande>
then
if <commande>
then
<commandes>
fi
fi
Mais pour tester plusieurs cas, il vaut mieux utiliser la déclaration case.
Quelles sont les différentes syntaxe de if et then
Le fait de placer la commande de test entre différentes parenthèses entraîne différentes méthodes d’exécution de l’instruction if.
Le tableau ci-dessous fournit une brève description ainsi qu’un cas d’utilisation pour chaque type de parenthèse.
Syntaxe | Description | Quand l’utiliser |
---|---|---|
if ( <commandes> ) | Sous-shell exécuté dans un sous-processus. | Lorsque les commandes affectent le shell ou l’environnement actuel Les modifications ne sont pas conservées lorsque la sous-coquille se termine |
if (( <commandes> )) | Bash extension | A utiliser pour les opérations arithmétiques et la manipulation de variables de style C |
if [ <commandes> ] | builtin POSIX, alias pour test <commands> . | Comparer des nombres et vérifier si un fichier existe |
if [[ <commandes> ]] | Extension Bash, une version avancée des crochets simples. | Chaîne correspondant à un motif joker |
Comment utiliser le if, then en bash Linux avec des exemples
Comment vérifier si un fichier existe avec if
Pour tester si un fichier existe, vous pouvez utiliser l’opérateur -f.
Pour plus d’informations sur les opérateurs de fichiers, reportez vous à la fin de ce tutoriel.
Voici un exemple simple pour vérifier le fichier /etc/resolv.conf existe :
#!/bin/bash
FICHIER=/etc/resolv.conf
if [ -f "$FICHIER" ]
then
echo "$FICHIER existe."
else
echo "$FICHIER n'existe pas."
fi
Comment utiliser if avec une commande
Dans cette exemple, la commande utilisée dans la déclaration if, exécute grep dans le fichier /etc/passwd.
Si cela est VRAI et que mak est présent, un message indique que l’utilisateur se trouve bien dans le fichier.
Dans le cas contraire, cela indique que le compte mak n’existe pas.
#!/bin/bash
if grep mak /etc/passwd
then
echo "mak possède un compte";
else
echo "mak ne possède pas de compte";
fi
Une autre syntaxe possible pour comparer le résultat de la commande whoami à la chaîne root.
La syntaxe $(command) est utilisée pour la substitution de commandes et vous donne la sortie de la commande.
Si cela est VRAI, un message indique que vous êtes bien connecté en tant que root.
#!/bin/bash
if [ $(whoami) = 'root' ]; then
echo "Vous êtes root"
fi
Comment vérifier si une variable ou chaîne de caractères est vide ou null
Voici les deux opérateurs à utiliser pour tester une chaîne de caractères ou variable est vide ou null :
- -n string n’est pas null.
- -z string string est null, c’est-à-dire d’une longueur nulle
foo="bar";
[ -n "$foo" ] && echo "foo n'est pas null"
foo is not null
[ -z "$foo" ] && echo "foo est null"
foo="";
[ -n "$foo" ] && echo "foo n'est pas null"
[ -z "$foo" ] && echo "foo est null"
foo est null
Tester les arguments d’un script Bash
Voici un exemple d’utilisation de if pour tester les arguments envoyés à un script bash.
Pour cela, on teste tout d’abord que la variable n’est pas null avec l’opérateur -z.
Ensuite on teste si l’argument est bien un fichier.
#!/bin/bash
if [ ! -z $1 ]
then
if [[ -f $1 ]]
then
<commande>
else
<commande>
fi
fi
Mais dans la majorité des cas, il vaut mieux utiliser la déclaration case.
#!/bin/bash
if [ ! -z $1 ]
then
case $1 in
pattern-1)
<commandes>;;
pattern-2)
<commandes>;;
pattern-3)
<commandes>;;
pattern-N)
<commandes>;;
*)
<commandes>;;
esac
fi
Quels sont les opérateurs if et then avec des exemples
Utiliser l’opérateur logique ET, OU
Les opérateurs logiques ET, OU permettent de tester deux commandes dont le résultat renvoyer peut être VRAI ou FAIX.
Pour utiliser l’opérateur logique OU (OR), il faut séparer les deux commandes par || :
if <commande> || <commande>
then
instructions;
fi
Pour utiliser l’opérateur logique ET (AND), séparez les deux commandes par && :
if <commande> && <commande>
then
instructions;
fi
D’autres syntaxes d’opérateur ET / OU.
Voici la liste :
Opérateur | Description |
[ ! e ] | vrai si e est fausse. ! est la négation. |
[ e1 -a e2 ] | vrai si e1 et e2 sont vraies. -a ou le et logique (And). |
[ e1 -o e2 ] | vrai si e1 ou e2 est vraie. -o ou le ou logique (Or). |
Les opérateurs sur les chaînes de caractères
Opérateur | Description |
---|---|
[ a1 = a2 ] | vrai si a1 et a2 sont égaux |
[ a1 != a2 ] | vrai si a1 et a2 sont différentes |
[ -z a ] | vrai si a est une chaîne vide (Zero), |
[ -n a ] | vrai si c n’est pas une chaîne vide (Non zero). |
Les opérateurs sur les chiffres
Opérateur | Description |
---|---|
-eq | est égal à |
-ne | n’est pas égal à |
-gt | est plus grand que |
-ge | est plus grand ou égal à |
-lt | est plus petit que |
-le | est plus petit ou égal à |
#!/bin/bash
echo -n "Entrer une valeur pour a: "
read a
echo -n "Entrer une valeur pour b: "
read b
if [ $a -lt $b ]
then
echo "a est plus petit que b"
elif [ $a -gt $b ]
then
echo "a est plus grand que b"
else
echo "a est égal to b"
fi
Opérateur sur les fichiers
Opérateur | Description |
-b | Vrai si le FICHIER existe et est un fichier de blocs spéciaux. |
-c | Vrai si le FICHIER existe et est un fichier de caractères spéciaux. |
-d | Vrai si le FICHIER existe et est un répertoire. |
-e | Vrai si le FICHIER existe et est un fichier, quel que soit le type (node, répertoire, socket, etc.). |
-f | Vrai si le FICHIER existe et est un fichier normal (pas un répertoire ou un périphérique). |
-G | Vrai si le FICHIER existe et a le même groupe que l’utilisateur qui exécute la commande. |
-h | Vrai si le FICHIER existe et est un lien symbolique. |
-g | Vrai si le FICHIER existe et si l’indicateur set-group-id (sgid) est activé. |
-k | Vrai si le FILE existe et a un drapeau sticky bit activé. |
-L | Vrai si le FICHIER existe et est un lien symbolique. |
-O | Vrai si le FICHIER existe et appartient à l’utilisateur qui exécute la commande. |
-p | Vrai si le FICHIER existe et est un pipe. |
-r | Vrai si le FICHIER existe et est lisible. |
-S | Vrai si le FICHIER existe et est un socket. |
-s | Vrai si le FILE existe et a une taille non nulle. |
-u | Vrai si le FICHIER existe, et que l’indicateur set-user-id (suid) est activé. |
-w | Vrai si le FICHIER existe et est accessible en écriture. |
-x | Vrai si le FICHIER existe et est exécutable. |
Liens
- 12 astuces bash à connaitre sur Linux
- Utiliser if, then en Bash Linux
- La boucle for en bash Linux avec +10 exemples
- La boucle while en bash Linux avec 7 exemples
- Comment utiliser la boucle until en Bash avec des exemples
- Bash IFS : utilisation et exemples
- Qu’est-ce que le fichier .bashrc, .bash_profile et .profile et les différences sous Linux
- Comment exécuter un fichier sur Linux (script shell ou binaire)
- Qu’est-ce qu’un fichier .sh et comment l’ouvrir
- Savoir quel est le shell de son Linux