Accueil » Projets » Opérateurs Bash et structures conditionnelles : le guide complet – Part 2
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éfinition
Exemple / 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éfinition
Exemple / 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éfinition
Exemple / 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éfinition
Exemple / 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éfinition
Exemple / Code
Numériques : -eq -ne -lt -le -gt -ge
shell 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
shell cloud@msinfra:~# trap 'echo Fin du script' EXIT
Concurrence et exécution parallèle
Concept / Définition
Exemple / Code
& exécute une commande en arrière-plan
shell cloud@msinfra:~# sleep 5 &
wait attend la fin des jobs
shell 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 1
Exercice 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 3
Exercice 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