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.