Cours Programmation ShellScript en PDF (Intermédiaire)
Programmation ShellScript : Ce qu'il faut savoir. Le shell script est un fichier texte interprété par un shell (ex: /bin/bash) qui automatise des séquences de commandes et permet de piloter des utilitaires système. Maîtriser le shell permet d'orchestrer tâches d'administration, chaînes de traitement et jobs planifiés avec crontab, tout en garantissant portabilité et lisibilité du code.
🎯 Ce que vous allez apprendre
- Gestion des variables et quoting — comprendre la nature typée comme chaîne du shell, les mécanismes d'échappement (
\), guillemets simples et doubles, et comment éviter les effets d'expansion incorrects. Vous saurez définir, lire et protéger des variables pour éviter les erreurs de word-splitting et d'expansion lors d'appels à des commandes externes. - Substitutions et expansion de paramètres — maîtriser les formes
${var},${#var},${var:-default},${var%pat}et similaires pour manipuler les chaînes et fournir des valeurs par défaut robustes. - Substitution de commandes et évaluation arithmétique — utiliser
$(commande)pour capturer la sortie d'une commande et$((...))pour les calculs entiers ; intégrerbcpour les réels. - Tests, conditions et codes de retour — appliquer les tests avec
[ ]et[[ ]], exploiter$?,$#,$@et gérer les structuresif,case,for,while. - Paramètres, portée et export — distinguer variables locales et exportées, utiliser
exportet comprendre l'impact sur les processus enfants, ainsi que la gestion des arguments positionnels. - Bonnes pratiques et gestion des options — appliquer les règles de codage fournies en annexes, implémenter la gestion d'options et produire des scripts lisibles, testables et maintenables en production. Le traitement des signaux (trap) est également couvert pour sécuriser les opérations sensibles.
- Structures répétitives et boucles — maîtriser
for,whileetuntilpour automatiser des itérations complexes sur des fichiers ou des listes.
Définition et usage des fonctions shell : modulariser le code via des fonctions (nom_fonction() { ... }) améliore la lisibilité, facilite les tests unitaires et la réutilisabilité. Les fonctions peuvent retourner un code de sortie (0 pour succès) et utiliser local pour restreindre la portée des variables. Exemple rapide : ma_tache() { local fichier="$1"; printf '%s\n' "Traitement $fichier"; }. L'utilisation systématique de fonctions rend les scripts plus modulaires et plus faciles à intégrer dans des toolchains d'administration ou des wrappers systemd.
💡 Pourquoi choisir ce cours ?
Exposés conceptuels et extraits de code (shebang #!/bin/bash, printf, read, substitutions et tests) privilégient la mise en pratique rapide. Thierry Vaira propose une approche pragmatique centrée on l'automatisation système et la robustesse des scripts. Les annexes dédiées aux règles de codage et à la gestion des options fournissent des guidelines applicables en production.
Maîtriser les structures de contrôle et boucles
Les structures répétitives sont au cœur de l'automatisation système : elles permettent de parcourir des listes, d'itérer sur des fichiers et d'enchaîner des traitements conditionnels. Ce chapitre détaille l'usage des boucles for, while et until, les bonnes pratiques pour éviter les expansions non désirées et comment combiner ces boucles avec les tests conditionnels pour obtenir des scripts fiables et lisibles.
# exemple : parcourir les fichiers .log dans un répertoire
for f in /var/log/*.log; do
printf 'Traitement: %s\n' "$f"
# traitement sécurisé avec quoting
gzip --verbose --stdout "$f" > "${f}.gz"
done
#!/bin/bash
# rotation simple des logs : compresse et conserve 7 jours
set -euo pipefail
LOG_DIR="/var/log/monapp"
ARCHIVE_DIR="/var/log/monapp/archive"
mkdir -p "$ARCHIVE_DIR"
find "$LOG_DIR" -type f -name '*.log' -mtime +7 -print0 | while IFS= read -r -d '' f; do
ts=$(date -r "$f" +%F)
gzip -c "$f" > "$ARCHIVE_DIR/$(basename "$f").$ts.gz"
: > "$f" # tronquer le fichier en conservant les permissions
done
Automatisation et gestion des signaux Unix
La gestion des signaux et de l'environnement du processus est indispensable pour des scripts robustes en production. Cette section explique comment intercepter les interruptions, nettoyer des ressources temporaires et garantir des états cohérents des services appelés. Le traitement des signaux s'intègre aux mécanismes d'automatisation pour éviter les corruptions de données lors d'arrêts imprévus. Il est également important de comprendre la hiérarchie des processus : chaque processus possède un PID et un PPID, hérite d'un environnement et peut devenir orphelin repris par le processus init (PID 1) — ou géré par systemd sur les systèmes modernes — ce qui influence la gestion des zombies et la reprise des ressources lors de terminaisons inattendues.
Traitement des signaux (trap)
La commande trap permet d'enregistrer des handlers pour des signaux tels que SIGINT ou SIGTERM. Utiliser trap garantit le nettoyage des fichiers temporaires, la fermeture ordonnée de connexions et l'exécution de routines de dépannage avant la terminaison du script.
tmp=$(mktemp)
trap 'rm -f "$tmp"; echo "Interrupted. Nettoyage effectué."; exit 1' INT TERM
# suite du script utilisant "$tmp"
👤 À qui s'adresse ce cours ?
- Public cible : administrateurs système, développeurs d'outils d'exploitation et étudiants en informatique souhaitant automatiser des tâches Linux et écrire des scripts réutilisables.
- Prérequis : connaissance de la ligne de commande Unix/Linux, maîtrise de quelques commandes de base (
ls,grep,cut,dirname,basename), compréhension des permissions de fichiers et notions d'exécution de processus (PID).
❓ Foire Aux Questions (FAQ)
Comment vérifier le code de retour ($?) d'une commande Shell ?
Tester immédiatement la variable spéciale $? après l'exécution d'une commande permet de conditionner le flux. Par exemple :
commande
if [ $? -ne 0 ]; then
echo "Erreur lors de l'exécution" >&2
# actions de reprise ou sortie
fi
Substitution de commande : faut-il utiliser $(...) ou les backticks ?
La forme $(...) est recommandée : elle améliore la lisibilité, autorise le nestage sans ambiguïté et réduit les erreurs lors de l'écriture d'expressions complexes. Les backticks restent supportés mais sont moins pratiques pour le maintien du code.
Cliquez sur le bouton ci-dessus pour télécharger le cours complet de Thierry Vaira au format PDF.