Tests en bash

Tests conditionnels en Bash : si c’est vrai, fais-le (sinon, panique)

Les scripts Bash ne se contentent pas de dérouler des lignes bêtement. Ils peuvent réfléchir. Du moins, simuler une réflexion rudimentaire. Et pour ça, il leur faut des tests conditionnels : des instructions qui permettent de prendre une décision.

Avec if, Bash devient capable de poser des questions. Comme « ce fichier existe-t-il ? », « ce nombre est-il plus grand que 5 ? », ou « suis-je vraiment en train d’exécuter ce script en root à 2h du matin ? »

Structure de base d’un test conditionnel

if [ condition ]; then
  commandes
fi

Ou avec indentation propre (vous êtes civilisé après tout) :

if [ condition ]; then
  commande1
  commande2
fi

Avec else

if [ condition ]; then
  commande_si_vrai
else
  commande_si_faux
fi

Avec elif (else if)

if [ condition1 ]; then
  commande1
elif [ condition2 ]; then
  commande2
else
  commande_par_défaut
fi

Types de tests disponibles

1. Tests sur les fichiers

  • -f fichier : le fichier existe et est un fichier normal
  • -d fichier : c’est un répertoire
  • -e fichier : le fichier existe (fichier ou dossier)
  • -r fichier : lisible
  • -w fichier : modifiable
  • -x fichier : exécutable
if [ -f /etc/passwd ]; then
  echo "Le fichier existe"
else
  echo "Le fichier est en grève"
fi

2. Tests sur les chaînes de caractères

  • == : égalité
  • != : différence
  • -z : chaîne vide
  • -n : chaîne non vide
read -p "Quel est votre nom ? " nom
if [ -z "$nom" ]; then
  echo "Nom vide, tristesse infinie."
else
  echo "Bonjour, $nom !"
fi

3. Tests sur les nombres

  • -eq : égal
  • -ne : différent
  • -lt : inférieur
  • -le : inférieur ou égal
  • -gt : supérieur
  • -ge : supérieur ou égal
read -p "Entrez un chiffre : " x
if [ "$x" -gt 10 ]; then
  echo "C’est grand."
else
  echo "Pas impressionnant."
fi

Les doubles crochets [[ ]]

Plus modernes que les simples [ ], ils permettent plus de liberté :

  • utilisation de && (et), || (ou)
  • globbing plus sûr
if [[ "$nom" == "admin" || "$nom" == "root" ]]; then
  echo "Vous êtes puissant"
else
  echo "Accès limité"
fi

Utilisation de test

Alternative à [ ] :

if test -d /tmp; then
  echo "/tmp est un répertoire"
fi

Syntaxe condensée (if à une ligne)

[ -f fichier.txt ] && echo "Fichier trouvé" || echo "Absent"

⚠️ Ce n’est pas équivalent à if/else dans tous les cas (car echo peut retourner 1 ou 0). À utiliser avec modération.

Exemples utiles

Vérifier si on est root

if [ "$EUID" -ne 0 ]; then
  echo "Ce script doit être exécuté en root."
  exit 1
fi

Tester si un service est actif

if systemctl is-active --quiet apache2; then
  echo "Apache est actif"
else
  echo "Apache est KO"
fi

Tester la présence d’un argument

if [ $# -eq 0 ]; then
  echo "Usage : $0 fichier"
  exit 1
fi

Les erreurs classiques (à ne pas commettre plus de 3 fois)

  • Oublier les espaces dans [ "$x" == "abc" ] → Bash explose
  • Confondre = et -eq
  • Utiliser une variable non protégée : [ $nom == "root" ] (si vide, crash)
  • Mettre des guillemets dans des crochets simples sans espace → erreur

Conclusion : les conditions, c’est le libre arbitre du script

Avec les tests conditionnels, vos scripts peuvent s’adapter, réagir, choisir. Ce sont les fondations de la logique. Et c’est grâce à eux que vos scripts Bash ne sont pas de simples récitations, mais des décisions automatisées.

Alors testez… mais testez bien. Et souvenez-vous : si votre condition est fausse, votre script ne pardonnera pas.