Développement Web

Bash scripting : le guide complet pour automatiser sous Linux

17 دقائق للقراءة

Sur chaque serveur Linux de la planète, derrière chaque déploiement, chaque sauvegarde nocturne, chaque tâche répétitive qui s’exécute sans qu’on y pense, il y a souvent la même chose : un script Bash. Ce n’est pas le langage à la mode, il n’a pas de logo coloré ni de conférence annuelle, et pourtant c’est le ciment qui tient l’infrastructure du monde. Apprendre Bash, ce n’est pas apprendre un langage de plus : c’est gagner le pouvoir de dire à une machine « fais ça, à ma place, à chaque fois, sans te tromper ». Ce guide est la carte du territoire — il explique le quoi et le pourquoi de Bash scripting, et vous oriente, étape par étape, vers six tutoriels pratiques qui vous feront construire de vrais outils.

Le fil rouge qui relie tous ces tutoriels est concret : Boubacar, développeur web freelance à Dakar, gère les sites de plusieurs petits clients. Plutôt que de refaire éternellement les mêmes manipulations à la main, il se construit une boîte à outils Bash. Au fil du parcours, cette boîte grandit — un outil par tutoriel — jusqu’à tourner toute seule. C’est exactement le chemin que vous allez suivre.

Sommaire

🎯 Ce que ce parcours vous permettra de faire

À l’issue de la série, en suivant les six tutoriels, vous serez capable de :

  • écrire un script Bash propre, exécutable et portable, de zéro ;
  • faire prendre des décisions à vos scripts (conditions, codes de sortie) et traiter des lots entiers de fichiers ;
  • structurer un script professionnel avec des fonctions, le mode strict et une interface en ligne de commande ;
  • extraire de l’information de journaux et de fichiers texte avec grep, sed et awk ;
  • automatiser n’importe quelle tâche pour qu’elle s’exécute toute seule, à heure fixe, avec journalisation.

🗺️ Le parcours d’apprentissage

Bash s’apprend dans l’ordre : chaque notion s’appuie sur la précédente. Voici le chemin conseillé, chaque étape construisant une brique de la boîte à outils de Boubacar.

  1. Écrire son premier script — le shebang, l’exécution, les variables. On crée un premier outil qui affiche l’état du système.
  2. Variables, conditions et tests — donner un cerveau au script avec if, [[ ]] et les codes de sortie. On bâtit un script de garde avant déploiement.
  3. Boucles et traitement de fichiers — répéter une action sur des centaines de fichiers. On automatise le renommage d’un dossier de photos.
  4. Fonctions, arguments et robustesse — structurer un vrai outil avec fonctions, set -euo pipefail et getopts.
  5. grep, sed et awk — faire parler du texte. On produit un rapport de trafic à partir d’un journal d’accès.
  6. Automatiser avec cron — la touche finale : la machine fait le travail toute seule, chaque semaine, sans vous.

Si vous débutez complètement avec le terminal, faites d’abord un détour par la ligne de commande Linux et les fondamentaux Linux : Bash scripting suppose qu’on sait déjà naviguer, lister et copier dans un terminal.

Pourquoi Bash reste incontournable

On entend parfois que Bash serait dépassé, que Python ou Go feraient mieux. C’est mal poser la question. Bash n’est pas en concurrence avec ces langages : il occupe une niche que rien d’autre ne remplit aussi bien. Quand il s’agit d’orchestrer des commandes existantes — copier des fichiers, lancer un programme, enchaîner des outils Unix, réagir à un code de retour — Bash est imbattable de concision. Là où Python demanderait dix lignes d’import subprocess, Bash en écrit une.

Sa deuxième force est l’ubiquité. Bash est présent par défaut sur la quasi-totalité des serveurs Linux, sans rien installer. Un script Bash tourne sur le VPS le plus modeste comme sur la plus grosse grappe de serveurs, hier comme dans dix ans, parce que sa syntaxe de base ne bouge pas. La version stable au moment d’écrire est Bash 5.3, sortie en juillet 2025, mais un script écrit pour Bash 4 (2009) tourne toujours sans modification. Cette stabilité est une valeur rare : ce que vous apprenez aujourd’hui restera vrai très longtemps.

Enfin, Bash est le langage natif de l’automatisation système. cron, les hooks Git, les pipelines d’intégration continue, les Dockerfiles, les scripts d’installation : tout ce monde parle Bash. Comprendre Bash, c’est comprendre la colle qui relie l’écosystème entier. Pour un développeur ou un administrateur en Afrique de l’Ouest, où l’on gère souvent soi-même ses serveurs faute de grosses équipes d’infrastructure, cette compétence n’est pas un luxe : c’est un multiplicateur de productivité immédiat.

Un exemple rend cette idée de « colle » concrète. Imaginez le flux quotidien d’une petite agence : un développeur pousse son code, un hook Git (un script Bash) lance les tests ; sur le serveur, un pipeline d’intégration continue exécute une suite de commandes Bash pour construire le site ; une image Docker se monte à partir d’un Dockerfile dont chaque instruction RUN est… une ligne de shell ; et chaque nuit, une tâche cron sauvegarde la base. À aucun moment on n’a écrit une « application » : on a enchaîné des outils existants avec quelques scripts. C’est précisément le métier de Bash, et c’est pourquoi le maîtriser démultiplie tout le reste de votre travail technique.

Les concepts fondamentaux

Avant de plonger dans les tutoriels, posons les idées qui structurent tout le reste. Les comprendre une fois rend tout le parcours évident.

Le shell, Bash et le script

Le shell est le programme qui interprète vos commandes : quand vous tapez ls et Entrée, c’est lui qui comprend, lance le programme et affiche le résultat. Bash (Bourne Again SHell) est le shell le plus répandu, successeur du shell historique sh. D’autres existent — zsh (par défaut sur macOS), fish, dash (un sh minimal et rapide) — mais Bash reste la référence pour les scripts. Un script, enfin, n’est rien d’autre qu’un fichier contenant les commandes que vous auriez tapées, prêtes à être rejouées d’un coup. Tout Bash scripting part de cette idée simple : automatiser ce qu’on ferait à la main.

Le shebang et le modèle d’exécution

La toute première ligne d’un script, le shebang #!/usr/bin/env bash, indique au système quel interpréteur utiliser. C’est lui qui fait la différence entre un simple fichier texte et un programme exécutable. La forme avec env est préférée car elle trouve Bash où qu’il soit installé — un détail de portabilité crucial quand on déploie sur des machines variées. On approfondit ce point, et les trois façons de lancer un script, dans le premier tutoriel.

Variables et expansions

Une variable retient une valeur ; on la déclare sans $ (nom="valeur") et on la lit avec $ ("$nom"). Mais la vraie richesse de Bash, ce sont ses expansions, ces transformations que le shell applique avant d’exécuter une ligne. La substitution de commande $(...) capture la sortie d’un programme dans une variable. L’expansion de paramètres ${nom%.txt} ou ${nom,,} manipule le contenu d’une variable (couper un suffixe, passer en minuscules) sans lancer le moindre outil externe. L’expansion arithmétique $(( a + b )) calcule. Le globbing *.jpg se développe en liste de fichiers. Maîtriser ces expansions, c’est écrire du Bash élégant plutôt que de tout déléguer à des commandes externes.

Le quoting : le concept central

S’il ne fallait retenir qu’une chose de tout ce guide, ce serait celle-ci : les guillemets ne sont pas décoratifs en Bash, ils sont structurels. Sans guillemets, le shell découpe les valeurs sur les espaces et développe les jokers, ce qui casse dès qu’un nom de fichier contient une espace ou un caractère spécial. Les guillemets doubles "$nom" protègent la valeur tout en laissant les variables se développer ; les guillemets simples '...' figent tout, littéralement. La règle d’or, répétée dans toute la série : une variable, des guillemets doubles, sauf raison explicite. C’est la source numéro un des bugs de débutant — et la corriger résout, à elle seule, la moitié des problèmes.

Codes de sortie et flux

Chaque commande, en finissant, laisse un code de sortie : 0 pour le succès, autre chose pour l’échec. C’est par ce nombre que les commandes se « parlent » : un if teste en réalité le code de sortie d’une commande, et les opérateurs && (« et alors ») et || (« ou sinon ») s’enchaînent selon ce code. En parallèle, tout programme dispose de trois flux : l’entrée standard (stdin), la sortie standard (stdout, canal 1) et la sortie d’erreur (stderr, canal 2). Les redirections les détournent : > écrit dans un fichier, >> ajoute, 2>&1 fusionne erreurs et sortie, et le pipe | branche la sortie d’une commande sur l’entrée de la suivante. Ce mécanisme de tuyauterie est l’âme de la philosophie Unix : de petits outils spécialisés, qu’on assemble en chaînes puissantes.

Lire un script : l’ordre des opérations

Une difficulté qui déroute les débutants est que Bash transforme votre ligne avant de l’exécuter, dans un ordre précis. Il développe d’abord les accolades ({a,b}), puis — de gauche à droite — le tilde (~ en chemin du dossier personnel), les variables, l’arithmétique et les substitutions de commande, puis il découpe le résultat sur les espaces (le fameux word splitting), et enfin il développe les jokers de fichiers. Comprendre cet enchaînement éclaire d’un coup la plupart des bugs : si une variable contenant une espace n’est pas protégée par des guillemets, c’est à l’étape de découpage qu’elle se brise en plusieurs morceaux. Les guillemets doubles, justement, désactivent ce découpage et le développement des jokers tout en laissant les variables se substituer — d’où leur rôle structurel. On ne mémorise pas cet ordre par cœur, mais savoir qu’il existe transforme le débogage : on cesse de croire à la magie et on raisonne sur ce que le shell fait réellement, ligne par ligne.

Vue d’ensemble pratique : les six briques

Le parcours se construit comme un escalier. Chaque tutoriel ajoute une capacité et une brique concrète à la boîte à outils. Voici la vue panoramique de ce que chacun apporte.

1. Premiers pas. On apprivoise le fichier de script, le shebang, le chmod +x et les variables. La brique : info-systeme.sh, qui résume l’état d’une machine. C’est le « hello world » utile — voir le tutoriel sur le premier script.

2. Décider. Les conditions et les tests donnent au script la capacité de réagir à la situation. La brique : verif-deploiement.sh, un garde-fou qui vérifie l’espace disque et la présence des fichiers avant d’autoriser un déploiement. Tout est détaillé dans variables, conditions et tests.

3. Répéter. Les boucles appliquent une action à des lots entiers sans fatigue. La brique : renommer-photos.sh, qui normalise un dossier de centaines d’images en quelques secondes. C’est l’objet du tutoriel boucles et traitement de fichiers.

4. Structurer. Les fonctions et le mode strict transforment un bricolage en outil fiable. La brique : atelier.sh, un script piloté par des options, robuste et réutilisable. À découvrir dans fonctions, arguments et robustesse.

5. Analyser. grep, sed et awk extraient de l’information du texte brut. La brique : rapport-trafic.sh, un mini-analytics qui résume un journal d’accès web. Voir grep, sed et awk. Pour les motifs de recherche eux-mêmes, le guide des expressions régulières est le compagnon idéal.

6. Automatiser. cron fait tourner les scripts tout seuls, à heure fixe. La brique finale relie tout : le rapport se génère chaque semaine, les vieux journaux se nettoient, tout est tracé. C’est le capstone du parcours, dans automatiser avec cron.

Les tutoriels de la série

Chaque tutoriel ci-dessous construit une brique du projet fil rouge et peut se suivre seul, mais l’ordre est pensé pour une progression sans saut :

Quand utiliser Bash (et quand passer à autre chose)

Un bon artisan connaît les limites de ses outils. Bash brille pour orchestrer des commandes, manipuler des fichiers, enchaîner des outils Unix, automatiser des tâches système courtes. Tant que votre script reste une suite linéaire d’appels à des programmes, avec quelques conditions et boucles, Bash est le bon choix : concis, sans dépendances, immédiatement disponible.

Mais Bash montre ses limites dès qu’on s’éloigne de ce cœur de métier. Il ne gère que des chaînes de caractères et des entiers — pas de décimaux natifs, pas de vraies structures de données complexes. Sa gestion des erreurs est rudimentaire, et un gros script Bash devient vite difficile à lire et à tester. La règle pratique : si votre script dépasse ~200 lignes, manipule des données structurées (JSON, calculs, API), ou demande une logique sophistiquée, il est temps de passer à Python. Reconnaître ce moment est une marque de maturité, pas un échec. Beaucoup d’outils naissent en Bash et migrent vers Python en grandissant ; c’est sain. Pour démarrer côté Python, voir nos parcours dédiés au langage. L’important est de ne pas s’acharner à écrire en Bash ce qui serait limpide ailleurs.

Adaptation au contexte ouest-africain

Bash scripting est particulièrement pertinent pour les réalités de la région, et mérite qu’on s’y attarde au-delà du « ça marche partout ». D’abord, le coût : Bash et tout son écosystème (grep, sed, awk, cron) sont gratuits et déjà installés. Aucun abonnement en devises, aucun logiciel propriétaire à acheter. Sur un VPS d’entrée de gamme à quelques milliers de FCFA par mois, vous disposez exactement des mêmes outils qu’un ingénieur de la Silicon Valley.

Ensuite, le travail hors-ligne. Là où la connexion est chère, lente ou intermittente, c’est un atout décisif : on écrit, teste et exécute des scripts entièrement en local, sans consommer de forfait data. Pas besoin du cloud pour apprendre ni pour produire. Un vieux portable reconverti sous Linux, ou un Raspberry Pi à moins de 40 000 FCFA, suffit amplement comme machine d’apprentissage et même de petit serveur.

Enfin, l’autonomie. Dans beaucoup de structures de la région — agences web, associations, PME, administrations — il n’y a pas d’équipe d’infrastructure dédiée : le développeur est aussi l’administrateur système. Savoir scripter en Bash, c’est pouvoir automatiser ses sauvegardes, surveiller ses serveurs et déployer ses sites soi-même, sans dépendre d’un prestataire coûteux. Un dernier point d’attention propre au terrain : les coupures électriques peuvent faire manquer une tâche cron sur une machine locale. L’outil anacron ou la directive @reboot rattrapent ces fenêtres manquées — un réflexe à connaître, détaillé dans le tutoriel sur cron.

Erreurs fréquentes à éviter

Voici les pièges qui reviennent le plus souvent, tous tutoriels confondus. Les garder en tête vous fera gagner des heures de débogage.

Erreur Cause Solution
Variable non protégée par des guillemets Découpage sur les espaces, développement des jokers Toujours "$variable" sauf raison explicite
Espace autour du = dans une affectation Bash croit à une commande Écrire nom="valeur" sans espace
Comparer des nombres avec = ou < = compare des chaînes ; < est une redirection -eq, -lt… ou (( ))
for f in $(ls) Casse sur les espaces et caractères spéciaux Boucler sur un glob : for f in *
Oublier le mode strict Bugs silencieux (variable vide, échec ignoré) set -euo pipefail en tête de script
Chemins relatifs dans cron cron démarre ailleurs, avec un PATH réduit Chemins absolus ; définir PATH dans la crontab
Script qui plante sur macOS Bash 3.2 par défaut (fonctions 4+ absentes) Installer un Bash récent ; shebang env
Fins de ligne Windows (CRLF) Fichier édité sous Windows dos2unix script.sh

L’écosystème : ShellCheck, shfmt, bats

Bash ne s’écrit plus à l’aveugle. Trois outils gratuits élèvent radicalement la qualité de vos scripts, et méritent d’entrer dans votre routine dès le début.

ShellCheck est l’outil indispensable : un analyseur statique qui lit votre script et signale les erreurs avant l’exécution — guillemets manquants, comparaisons fautives, variables non définies, et des dizaines d’autres pièges. La version stable est 0.11.0 (août 2025). Il s’utilise en ligne de commande (shellcheck mon-script.sh), dans l’éditeur via une extension, ou directement sur le site shellcheck.net sans rien installer — pratique quand la bande passante est limitée. Prenez l’habitude de passer chaque script à ShellCheck : il vous apprendra le bon Bash en corrigeant vos réflexes.

shfmt formate automatiquement vos scripts selon un style cohérent (indentation, espaces), comme prettier pour le web. bats (Bash Automated Testing System) permet d’écrire de vrais tests pour vos scripts les plus critiques. Ces deux outils deviennent précieux dès que vos scripts servent en production ou sont partagés en équipe. Inutile de tout adopter d’un coup : commencez par ShellCheck, le reste viendra au besoin.

FAQ

Q : Bash ou Python pour débuter l’automatisation ?
R : Les deux sont complémentaires. Bash pour orchestrer des commandes système et les tâches courtes ; Python dès qu’il y a de la logique, des données structurées ou du calcul. Apprendre Bash d’abord est judicieux : il est plus proche du terminal et indispensable pour comprendre les serveurs.

Q : Faut-il connaître Linux avant d’apprendre Bash ?
R : Un minimum, oui : savoir naviguer dans les dossiers, lister, copier, déplacer des fichiers. Si ce n’est pas acquis, commencez par la ligne de commande Linux et les fondamentaux Linux, puis revenez ici.

Q : Quelle version de Bash dois-je viser ?
R : La stable actuelle est Bash 5.3 (juillet 2025), mais écrire pour Bash 4 garantit la compatibilité partout. Le seul vrai piège est macOS, resté à Bash 3.2 : installez-y un Bash récent via Homebrew si vous y développez.

Q : Mes scripts sont-ils portables d’un système à l’autre ?
R : Largement, si vous respectez deux règles : un shebang #!/usr/bin/env bash et l’évitement des fonctions trop récentes quand la cible est ancienne. ShellCheck signale d’ailleurs les constructions non portables.

Q : Comment éviter de casser un serveur avec un mauvais script ?
R : Testez toujours sur une copie ou une machine de test, utilisez le mode strict set -euo pipefail, passez par ShellCheck, et pour les commandes destructives (rm, sed -i), exécutez-les d’abord sans l’option destructive pour vérifier la cible.

Q : Bash est-il adapté à la production en entreprise ?
R : Oui, pour ce qu’il fait bien : scripts de déploiement, sauvegardes, tâches cron, glue entre outils. Au-delà d’une certaine complexité, on bascule vers un langage plus structuré. Le tutoriel Bash pour sysadmin montre des usages de production concrets.

Pour aller plus loin

📚 Ressources et références

Mots-clés : bash scripting, script shell linux, apprendre bash, automatisation linux, shell bash débutant, set -euo pipefail, cron, grep sed awk, guide bash.

مشاركة