Le scripting Bash est souvent redouté par les débutants, mais il reste l’un des outils les plus puissants pour automatiser des tâches sous Linux. Du simple enchaînement de commandes à l’écriture de fonctions complexes, Bash permet aux administrateurs systèmes, développeurs et ingénieurs DevOps d’optimiser leur travail, de gagner du temps et de réduire les erreurs humaines. Dans cet article, nous vous accompagnons pas à pas pour maîtriser Bash, avec des explications détaillées, des exemples de code pratiques et les meilleures pratiques pour écrire des scripts robustes, maintenables et sécurisés.
Comprendre Bash : le shell par excellence
Qu’est-ce que Bash ?
Bash, ou Bourne Again Shell, est l’interpréteur de commandes par défaut sur la majorité des distributions GNU/Linux. Il est basé sur le shell originel Bourne (sh) mais intègre des fonctionnalités avancées inspirées de ksh et csh, telles que l’autocomplétion, l’édition de ligne de commande, la gestion de l’historique, les tableaux, les expressions conditionnelles et l’arithmétique intégrée.
Bash est présent sur presque toutes les plateformes Linux, sur macOS (remplacé par zsh depuis Catalina mais toujours disponible), sur WSL, et peut être installé sur Windows via Git Bash ou Cygwin. Cette universalité fait de Bash un outil indispensable pour le scripting multiplateforme et la gestion de serveurs.
Pourquoi apprendre Bash ?
Dans un monde où l’automatisation est clé, Bash est un allié majeur. Il permet notamment de :
- Créer des scripts d’installation ou de déploiement
- Automatiser les sauvegardes de fichiers et de systèmes
- Nettoyer les logs et fichiers temporaires
- Surveiller les processus et services
- Réagir automatiquement à des événements via cron, inotify ou systemd
Comparé à Python ou PowerShell, Bash est léger, natif, préinstallé et spécialisé dans l’interaction avec le noyau Linux, les processus, les fichiers et les permissions. Il est donc parfait pour les tâches d’administration système et le développement d’outils internes.
Anatomie d’un script Bash
Le shebang : première ligne indispensable
Tout script Bash commence par une ligne appelée shebang :
#!/bin/bash
Cette ligne indique au noyau quel programme utiliser pour interpréter le script et constitue une bonne pratique essentielle.
Exemple de script simple
#!/bin/bash
nom= »Utilisateur »
if [ « $nom » != « » ]; then
echo « Bonjour, $nom ! »
else
echo « Aucun nom défini. »
fi
Ce script démontre déjà plusieurs principes fondamentaux : les variables, les conditions et l’utilisation de guillemets pour protéger les valeurs.
Bonnes pratiques
- Toujours commenter vos scripts avec #
- Utiliser set -euo pipefail pour gérer les erreurs
- Encadrer les variables avec des guillemets doubles : « $maVar »
- Différencier variables locales et globales
Variables et entrées utilisateur
Les variables en Bash
Les variables Bash sont dynamiques et non typées. Elles sont globales par défaut mais peuvent être déclarées locales dans une fonction :
prenom= »Alice »
echo « Bonjour $prenom »
Lecture d’une valeur utilisateur :
read -p « Entrez votre nom : » nom
echo « Bienvenue, $nom »
Variable locale dans une fonction :
maFonction() {
local chemin= »/tmp »
echo $chemin
}
Variables système utiles
- $USER : nom de l’utilisateur
- $PWD : répertoire courant
- $HOME : répertoire personnel
- $RANDOM : nombre aléatoire
- $? : code de retour de la dernière commande
Fonctions Bash : modularité et réutilisation
Syntaxe et exécution
maFonction() {
echo « Fonction exécutée »
}
maFonction
Fonctions avec paramètres
bonjour() {
echo « Bonjour $1 »
}
bonjour « Alice »
Valeur de retour
addition() {
echo $(($1 + $2))
}
resultat=$(addition 3 7)
echo « Total : $resultat »
Création et navigation de dossiers
creerEtEntrer() {
mkdir -p « $1 »
cd « $1 »
}
creerEtEntrer monDossier
Structures de contrôle
Condition if
if [ $age -ge 18 ]; then
echo « Majeur »
else
echo « Mineur »
fi
Condition case
read -p « Choix (a/b/c) : » choix
case $choix in
a) echo « Option A » ;;
b) echo « Option B » ;;
c) echo « Option C » ;;
*) echo « Option inconnue » ;;
esac
Astuce : utiliser [[ … ]] pour les tests complexes, combiné avec && et || pour la logique booléenne.
Boucles en Bash
Boucle for
for i in {1..5}; do
echo « Iteration $i »
done
Boucle while
count=1
while [ $count -le 3 ]; do
echo « Compteur : $count »
((count++))
done
Boucle until
until [ -f /tmp/fichier.attendu ]; do
echo « En attente… »
sleep 1
done
Tableaux et itération
fruits=(pomme banane orange)
for fruit in « ${fruits[@]} »; do
echo « $fruit »
done
Accès direct : ${fruits[1]} → “banane”
Redirections et pipes
- > : écrase un fichier
- >> : ajoute à un fichier
- 2> : redirige les erreurs
- &> : redirige stdout + stderr
Exemple :
commande > sortie.txt 2> erreur.log
Pipes | :
du -sh * | sort -h
Logique conditionnelle :
[ -f fichier.txt ] && echo « Fichier trouvé » || echo « Absent »
Expressions régulières et validation
email= »exemple@mail.com »
if [[ $email =~ ^[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,}$ ]]; then
echo « Email valide »
fi
Debug, sécurité et gestion des erreurs
- bash -x script.sh : mode debug
- set -euo pipefail : mode strict
- trap pour capturer signaux :
trap ‘echo « Interruption capturée »; exit’ INT
Toujours valider les entrées :
if [[ ! « $1 » =~ ^[0-9]+$ ]]; then
echo « Erreur : entrée non numérique »
exit 1
fi
Automatisation avec cron
Édition de la table cron :
crontab -e
Exécution quotidienne à 1h :
0 1 * * * /chemin/vers/script.sh
Exemples pratiques
Script de sauvegarde
#!/bin/bash
source=/home/user/docs
dest=/mnt/backup/docs_$(date +%F)
mkdir -p « $dest »
rsync -a –delete « $source/ » « $dest/ »
echo « Sauvegarde OK »
Nettoyage automatique
find /tmp -type f -mtime +7 -exec rm -f {} \;
echo « Fichiers anciens supprimés »
Ressources recommandées
- man bash
- tldr.sh
- explainshell.com
- shellcheck.net
Ce qu’il faut retenir
Bash est un outil puissant pour automatiser, contrôler et optimiser votre environnement Linux. Maîtrisé correctement, il permet de réduire les erreurs, créer des scripts réutilisables et améliorer la productivité. C’est une compétence technique essentielle pour tout professionnel des systèmes.
FAQ
1. Bash est-il encore pertinent avec Python ou PowerShell ?
Oui. Bash est léger, natif et idéal pour interagir directement avec le système Linux, les fichiers et les processus, ce qui en fait un outil complémentaire à Python ou PowerShell.
2. Comment débuter avec Bash sans connaissances préalables ?
Commencez par des scripts simples, testez des commandes une par une, et utilisez les ressources comme tldr.sh ou explainshell.com pour comprendre chaque commande.
3. Peut-on automatiser toutes les tâches avec Bash ?
Presque toutes les tâches liées au système, aux fichiers, aux processus et à la planification peuvent être automatisées. Pour des besoins plus complexes (API, web, bases de données), Bash peut être combiné avec Python ou d’autres langages.