Automatiser l'administration : Bash et PowerShell
Écrire des scripts Bash et PowerShell fiables pour les tâches répétitives (sauvegardes, comptes, contrôles), les planifier et les rendre sûrs.
L'essentiel
- On automatise ce qui est répétitif, fastidieux ou risqué : gain de temps, fiabilité, régularité, traçabilité.
- Script Bash :
#!/bin/bash, commentaires,chmod u+x, test de syntaxe avecbash -n. - Variables :
NOM="valeur"sans espace, lues avec"$NOM"entre guillemets ;$(commande)pour récupérer un résultat. - Paramètres :
$1,$2,$#,"$@"; valeur par défaut${2:-7}. - Code de retour 0 = succès ;
$?,if [ … ],&&,||,exit N;set -euo pipefail. - Boucles
foretwhile read; fonctions ; journal avec>>etlogger. - cron : minute heure jour mois jour-semaine commande ; timers systemd avec
OnCalendaretPersistent=true. - PowerShell :
param(),foreachsur des objets,Import-Csv -Delimiter ';',try/catch,-WhatIf,Start-Transcript. - Stratégie d'exécution
RemoteSigned; planification avecRegister-ScheduledTask. - Script de production : idempotent, testé, journalisé, versionné, sans secret en clair, exécuté avec le moindre privilège.
Piège classique
Les crochets sont des commandes : il faut un espace après [ et avant ]. if [-d $D] provoque « command not found ». Et sans guillemets, une variable vide ou contenant un espace casse le test : écris toujours "$D".
Le mode strict
En tête de script, set -euo pipefail arrête le script à la première erreur (-e), sur une variable non définie (-u) et si une commande d'un enchaînement | échoue (pipefail). Un script de production démarre presque toujours ainsi.
Piège classique
Un tableur français enregistre les CSV avec un point-virgule et souvent un encodage Windows : précise -Delimiter ';' et vérifie les accents (enregistre en « CSV UTF-8 »). Sinon, Import-Csv voit une seule colonne nommée « Prenom;Nom;Service » et toutes les propriétés sont vides.
Déboguer pas à pas
En Bash, bash -x script.sh affiche chaque ligne avant de l'exécuter, avec les variables remplacées par leur valeur ; bash -n vérifie la syntaxe sans rien exécuter. En PowerShell, Set-PSDebug -Trace 1 fait la même chose, et -WhatIf simule les modifications.
Commandes clés
| Pour… | Commandes |
|---|---|
| Préparer un script Bash | #!/bin/bash · set -euo pipefail · chmod 750 script.sh · bash -n / bash -x |
| Tester et décider | if [ -d "$D" ]; then … fi · cmd || exit 1 · $? |
| Répéter | for D in a b c; do … done · while read -r L; do … done < fichier |
| Planifier (Linux) | crontab -e · 30 2 * * 1-5 /chemin/script.sh >> journal 2>&1 · systemctl list-timers |
| PowerShell | param([Parameter(Mandatory)][string]$F) · Import-Csv -Delimiter ';' · try { } catch { } |
| Exécuter et planifier (Windows) | Set-ExecutionPolicy RemoteSigned · -WhatIf · Register-ScheduledTask |