Menu Fermer

Utiliser if, then en Bash Linux

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.

Utiliser if, then en Bash Linux

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.

SyntaxeDescriptionQuand 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 extensionA 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
Les différentes syntaxe de if et then

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érateurDescription
[ ! 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).
Utilisation de l’opérateur logique et, ou

Les opérateurs sur les chaînes de caractères

OpérateurDescription
[ 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 chaînes de caractères

Les opérateurs sur les chiffres

OpérateurDescription
-eqest égal à
-nen’est pas égal à
-gtest plus grand que
-geest plus grand ou égal à
-ltest plus petit que
-leest plus petit ou égal à
Les opérateurs sur les chiffres
#!/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érateurDescription
-bVrai si le FICHIER existe et est un fichier de blocs spéciaux.
-cVrai si le FICHIER existe et est un fichier de caractères spéciaux.
-dVrai si le FICHIER existe et est un répertoire.
-eVrai si le FICHIER existe et est un fichier, quel que soit le type (node, répertoire, socket, etc.).
-fVrai si le FICHIER existe et est un fichier normal (pas un répertoire ou un périphérique).
-GVrai si le FICHIER existe et a le même groupe que l’utilisateur qui exécute la commande.
-hVrai si le FICHIER existe et est un lien symbolique.
-gVrai si le FICHIER existe et si l’indicateur set-group-id (sgid) est activé.
-kVrai si le FILE existe et a un drapeau sticky bit activé.
-LVrai si le FICHIER existe et est un lien symbolique.
-OVrai si le FICHIER existe et appartient à l’utilisateur qui exécute la commande.
-pVrai si le FICHIER existe et est un pipe.
-rVrai si le FICHIER existe et est lisible.
-SVrai si le FICHIER existe et est un socket.
-sVrai si le FILE existe et a une taille non nulle.
-uVrai si le FICHIER existe, et que l’indicateur set-user-id (suid) est activé.
-wVrai si le FICHIER existe et est accessible en écriture.
-xVrai si le FICHIER existe et est exécutable.
Opérateur sur les fichiers