Advanced Bash : automatisez le travail de routine en toute sécurité

Les scripts Shell regroupent les binaires, les API et les fichiers. Cette leçon couvre le mode strict, les tubes, les boucles, `find` + `xargs`, cron et quand arrêter d'écrire Bash et passer à Python ou Ansible.

Comment lire cette leçon : L'explorateur de code explique les premières lignes que vous devez mettre dans chaque script. Pipeline est le modèle de traitement de texte Unix (filtre → transformation → agrégat). Le code à onglets contraste l'itération sécurisée des fichiers avec l'environnement minimal de cron. Les cartes quadrillées séparent le point idéal de Bash des cas où une vraie langue gagne.

Démarrez chaque script avec des garde-fous

Sans `set -euo pipefail`, une commande ayant échoué dans un test `if` ou un pipeline peut continuer silencieusement : les scripts semblent fonctionner alors que la moitié des étapes n'ont rien fait. pipefail est critique : sinon seul le statut de sortie de la dernière commande compte.

Chaque ligne définit un contrat : shebang → mode strict → IFS facultatif. Cliquez sur les explications pour voir pourquoi les échecs silencieux sont la valeur par défaut dans le shell.
bash
1
#!/usr/bin/env bash
2
set -euo pipefail
3
IFS=$'\n\t'
4
# ... your commands ...
Les données circulent dans des tuyaux

Un pipeline connecte la sortie standard d'un programme à la sortie standard du suivant. C'est la philosophie d'Unix : des petits outils, composables. Utilisez `| tee log.txt` lorsque vous avez besoin à la fois d'un fichier et de l'étape suivante.

Widget Pipeline : de gauche à droite se trouve le flux de données. grep rétrécit les lignes ; Colonnes de projets awk/cut ; trier | uniq -c est le modèle de comptage de fréquence classique. La redirection à la fin capture le flux final — n'oubliez pas « 2>&1 » pour fusionner stderr pour les journaux.

Modèle mental : les octets circulent de gauche à droite ; chaque étape doit lire stdin et écrire stdout pour que la chaîne fonctionne. Un tuyau cassé (SIGPIPE) se produit si l'aval ferme plus tôt.
Source
chat, queue -f, journalctl
grep -E
filtre de ligne / regex
maladroit / coupé
champs et transformations
trier | unique
déduplication, compte
>
fichier ou tube suivant
find + xargs : agir sur de nombreux fichiers
Imprimer les chemins sous /var/log
bash
find /var/log -type f -name '*.log' -print0 | \
  xargs -0 -I{} ls -lh {}
Parallélisme (à utiliser avec précaution)
bash
find . -type f -name '*.txt' -print0 | \
  xargs -0 -P 4 gzip
Quand Bash est suffisant, et quand ce n'est pas le cas

Bash excelle dans l’orchestration de programmes déjà existants. Lorsque vous commencez à analyser du JSON imbriqué avec des regex, recherchez « jq », Python ou un exécuteur de tâches : la lisibilité et la gestion des erreurs gagnent.

Carte de gauche = scripts de colle ; carte de droite = programmes avec état et API. Si vous avez besoin de tests unitaires pour la logique, et non de tests d'intégration pour les CLI, quittez Bash.

Des habitudes qui empêchent les pages à 3 heures du matin

Variables de citation : "$file" et non $file, toujours. Après les pipelines, vérifiez `${PIPESTATUS[@]}` si vous avez désactivé pipefail pour une ligne. Utilisez echo >&2 ou un assistant de journalisation pour les messages afin que la sortie standard reste propre pour les tuyaux. Extrayez les fonctions avec des variables « locales » à l'intérieur.
Exécutez shellcheck (plugin IDE ou CI) : il signale les variables non citées, les shebang manquants et le code inaccessible.
Ne jamais boucler | dénigrer un installateur distant sans somme de contrôle ni confiance du fournisseur : risque pour la chaîne d'approvisionnement.
Pour les longues boucles sur find, utilisez -print0 et read -d '' pour gérer les noms de fichiers étranges.
Exécuter des scripts en tant que root multiplie les erreurs : utilisez le moindre privilège, testez d'abord dans une VM ou un conteneur.