Opérateurs Bash et structures conditionnelles : le guide complet
Opérateurs Bash et structures conditionnelles : le guide complet

Introduction :

Pourquoi maîtriser les opérateurs Bash et les instructions de contrôle ?

Quand on parle de scripting Bash, tout repose sur la logique. Chaque test, chaque boucle, chaque calcul passe par des opérateurs et des instructions de contrôle.
C’est ce qui transforme une simple suite de commandes en un script intelligent, capable de prendre des décisions.

Dans ce projet, on explore tous les opérateurs Bash — arithmétiques, logiques, de comparaison, de redirection, de test, et d’affectation — ainsi que toutes les structures conditionnelles : if, case, while, until, for, et leurs variantes avancées.

À la fin, tu sauras construire des scripts Bash robustes, lisibles et sûrs.


Les bases pour raisonner en Bash

Concept / DéfinitionExemple / Code
Chaque commande Bash retourne un code de sortie (0 = succès, ≠0 = échec). Ces valeurs déterminent le comportement des opérateurs && et `
set -euo pipefail rend un script plus fiable : il s’arrête sur erreur (-e), sur variable non définie (-u) et sur erreur dans un pipe (-o pipefail).shell cloud@msinfra:~# set -euo pipefail

Opérateurs arithmétiques

Concept / DéfinitionExemple / Code
Les calculs s’effectuent dans (( )) ou $(( )).shell cloud@msinfra:~# x=5; y=3; echo $((x*y))
Principaux opérateurs : + - * / % ** ++ --shell cloud@msinfra:~# ((x++)); ((x**=2))
(( )) retourne 1 si le résultat est 0, utile pour les conditions.« `shell cloud@msinfra:~# ((x > 10))

Opérateurs d’affectation

Concept / DéfinitionExemple / Code
Affectation simple : x=10 — sans espaces !shell cloud@msinfra:~# x=10
Affectation composée : +=, -=, *=, /= etc.shell cloud@msinfra:~# ((x+=2))
Déclaration avec local ou declare (dans les fonctions).shell cloud@msinfra:~# local count=0

Opérateurs logiques

Concept / DéfinitionExemple / Code
&& exécute la seconde commande seulement si la première réussit.shell cloud@msinfra:~# test -f /etc/passwd && echo "OK"
`
Groupement logique avec { …; } et ( … ) pour exécuter plusieurs commandes.shell cloud@msinfra:~# { echo A; echo B; }

Opérateurs de comparaison

Concept / DéfinitionExemple / Code
Numériques : -eq -ne -lt -le -gt -geshell cloud@msinfra:~# if [ $a -lt 10 ]; then echo "petit"; fi
Chaînes : =, !=, -z, -n, <, >shell cloud@msinfra:~# if [[ -z $nom ]]; then echo "vide"; fi
Regex et globbing : [[ $str =~ ^[0-9]+$ ]]shell cloud@msinfra:~# if [[ $var =~ [A-Z]+ ]]; then echo "maj"; fi

Tests sur les fichiers

Concept / DéfinitionExemple / Code
-e existe, -f fichier, -d dossiershell cloud@msinfra:~# [ -d /tmp ] && echo "Dossier OK"
Permissions : -r, -w, -xshell cloud@msinfra:~# [ -x /usr/bin/bash ] && echo "exécutable"
Comparaisons : -nt, -ot, -efshell cloud@msinfra:~# [ fichier1 -nt fichier2 ]

Redirections et pipes

Concept / DéfinitionExemple / Code
> écrase, >> ajoute, < litshell cloud@msinfra:~# echo "Texte" >> fichier.log
2> redirige les erreurs, &> redirige toutshell cloud@msinfra:~# cmd &> sortie.log
`` crée un pipeline
Here-doc : bloc de texte simulant une entrée standardshell cloud@msinfra:~# cat <<EOF\nTexte\nEOF

Substitution et expansions

Concept / DéfinitionExemple / Code
${var:-def} : valeur par défautshell cloud@msinfra:~# echo "${NAME:-Inconnu}"
${#var} : longueur, ${var/pat/repl} : remplacementshell cloud@msinfra:~# var="test"; echo ${#var}
${var^^} majuscules, ${var,,} minusculesshell cloud@msinfra:~# nom="bash"; echo ${nom^^}

Tableaux et opérateurs associés

Concept / DéfinitionExemple / Code
Tableau indexé : arr=(1 2 3)shell cloud@msinfra:~# arr=(1 2 3); echo ${arr[1]}
Tableau associatif : declare -Ashell cloud@msinfra:~# declare -A user=( [nom]="alex" [id]=42 ); echo ${user[nom]}
Longueur : ${#arr[@]}shell cloud@msinfra:~# echo ${#arr[@]}

Structures conditionnelles

Concept / DéfinitionExemple / Code
if … elif … else … fishell cloud@msinfra:~# if ((x>10)); then echo "grand"; else echo "petit"; fi
case … esac pour motifs simplesshell cloud@msinfra:~# case $1 in start) echo "démarrage";; stop) echo "arrêt";; esac
Ternaires via arithmétique : ((cond?x:y))shell cloud@msinfra:~# (( a>0 ? b=1 : b=0 ))

Boucles et contrôles de flux

Concept / DéfinitionExemple / Code
for i in … itère sur une listeshell cloud@msinfra:~# for i in *.sh; do echo $i; done
while / until testent une conditionshell cloud@msinfra:~# while true; do echo "run"; sleep 1; done
break / continue sautent ou quittentshell cloud@msinfra:~# for i in {1..5}; do ((i==3)) && continue; echo $i; done
select crée des menus interactifsshell cloud@msinfra:~# select opt in start stop; do echo $opt; done

Fonctions, erreurs et signaux

Opérateurs Bash et structures conditionnelles : le guide complet
Concept / DéfinitionExemple / Code
Fonction : ma_fonction() { … }shell cloud@msinfra:~# hello() { echo "Hi $1"; }; hello Alex
return définit le code de sortie d’une fonctionshell cloud@msinfra:~# f(){ return 2; }; f; echo $?
trap intercepte un signal (ex : EXIT, INT)shell cloud@msinfra:~# trap 'echo Fin du script' EXIT


Concurrence et exécution parallèle

Concept / DéfinitionExemple / Code
& exécute une commande en arrière-planshell cloud@msinfra:~# sleep 5 &
wait attend la fin des jobsshell cloud@msinfra:~# wait
Substitution de processus <(cmd)shell cloud@msinfra:~# diff <(ls /etc) <(ls /usr)

💬 Retour d’expérience du lecteur

Avez-vous déjà utilisé des expressions arithmétiques ou des redirections complexes ?
Racontez vos astuces ou vos erreurs classiques dans les commentaires — elles serviront à d’autres admins.


🧩 Exercices pratiques

Exercice 1Exercice 2
Vérifiez si un fichier existe et est exécutable, sinon affichez un message d’erreur.Créez un menu interactif avec select proposant de démarrer ou arrêter un service factice.
Exercice 3Exercice 4
Utilisez for pour lister tous les fichiers .log et afficher ceux de plus de 1 Mo (-size +1M).Écrivez une boucle while qui compte jusqu’à 10 en affichant les nombres pairs uniquement.

🔧 Recommandations et autres solutions

  • Pour la portabilité POSIX, remplace [[ ]] par [ ] et évite les tableaux associatifs.
  • Outils utiles : shellcheck, bats, set -x pour le débogage.
  • Pour des scripts système : certaines commandes exigent sudo (par exemple pour écrire dans /etc ou /usr/local/bin).

Conclusion

Les opérateurs et structures conditionnelles sont la charpente logique d’un script Bash.
En les combinant intelligemment, tu peux automatiser n’importe quelle tâche, du simple test de fichier à la gestion d’un cluster complet.
La clé, c’est la clarté et la prévisibilité : toujours tester, toujours documenter.

Et vous, comment gérez-vous cette situation ? Partagez votre expérience en commentaire !


✅ Solutions des exercices

Exercice 1

cloud@msinfra:~# file="/usr/bin/bash"
cloud@msinfra:~# if [ -x "$file" ]; then
>   echo "Exécutable trouvé"
> else
>   echo "Erreur : fichier manquant ou non exécutable"
> fi

Exercice 2

cloud@msinfra:~# select action in start stop; do
> case $action in
>   start) echo "Service démarré";;
>   stop)  echo "Service arrêté";;
> esac
> done

Exercice 3

cloud@msinfra:~# for f in *.log; do
> [ -f "$f" ] && [ $(stat -c%s "$f") -gt 1048576 ] && echo "$f > 1Mo"
> done

Exercice 4

cloud@msinfra:~# i=0
cloud@msinfra:~# while (( i <= 10 )); do
> (( i%2 == 0 )) && echo $i
> ((i++))
> done

Leave a Comment

Comments

No comments yet. Why don’t you start the discussion?

    Alors tu en pense quoi de cette article ? Dis-moi tous..