Nouveau cours : Bash pour l'automatisation
Le chapitre Fondations ouvre sa partie Shell et outils avec Bash pour l'automatisation. Linux : premiers pas apprenait à taper des commandes ; ce cours apprend à en faire des programmes : des scripts qui tournent la nuit sans personne pour les regarder, qui échouent bruyamment plutôt que de corrompre des données, et qu'un collègue peut relire, modifier et tester.
Des scripts hérités plutôt qu'un manuel de syntaxe
On retrouve Signalements et sa machine de tâches de fond, sig-outils. Camille y a laissé des scripts qui fonctionnent la plupart du temps : l'un casse dès qu'un nom de fichier contient une espace, un autre a envoyé un fichier vide à la mairie après une erreur, un troisième laisse des fichiers temporaires à chaque interruption. L'équipe les range dans un dépôt Git et les réécrit, leçon après leçon. À la fin, l'outil de publication de l'export a une vraie interface en ligne de commande, des codes de sortie documentés, un verrou, un nettoyage garanti, et il est analysé par ShellCheck et couvert par des tests Bats en intégration continue.
Chaque leçon explique ce que Bash fait réellement d'une ligne avant de l'exécuter, et signale les différences avec sh (dash sur Debian et Ubuntu), parce qu'un script lancé par cron ou par /bin/sh n'est pas lancé par Bash. Les exemples visent Bash 5.2, celui d'Ubuntu 24.04 et de Debian 13.
Ce que l'on apprend à ses dépens, en moins cher
Quelques-uns des pièges que les leçons démontent :
- un script testé avec
bashet lancé avecsh, où un bashisme ne provoque aucune erreur mais fait autre chose ; for f in $(ls), et la purge qui supprime un fichier qu'elle n'aurait jamais dû toucher ;$(( 08 - 1 )): une date du mois d'août lue comme un nombre octal, et un script qui continue avec une variable vide ;local x=$(commande), qui masque l'échec de la commande, même sousset -e;- une fonction appelée dans un
if, etset -equi cesse de s'appliquer à tout son contenu ; sshdans une bouclewhile read, qui avale la liste des machines après la première ;- un piège
EXITqui vise une variable locale, et le répertoire temporaire qui n'est jamais supprimé ; wait -npour recueillir les codes de sortie de tâches parallèles, et la tâche tuée par un signal qui disparaît ;set -xen production, et le jeton d'accès qui part dans le journal.
Pour valider
Un quiz de vingt-quatre questions valide le niveau 100 (Apprenti). Le lab fait construire le dépôt complet sur votre poste, sans cloud, puis un script vérifie le résultat de l'extérieur : analyse statique, tests, codes de sortie, verrou, nettoyage après interruption et noms de fichiers hostiles. Il valide le niveau 200 (Compagnon).