1. Les fondations d’un script Bash professionnel

L’écriture de scripts shell en environnement d’entreprise ne tolère aucune approximation. Tout script d’exploitation doit intégrer un mode strict dès son en-tête pour stopper l’exécution à la moindre anomalie :

#!/usr/bin/env bash
# Mode strict pour l'exploitation en production :
set -euo pipefail
IFS=$'
	'

# -e : Arrête le script immédiatement si une commande retourne un code d'erreur != 0
# -u : Déclenche une erreur si une variable non définie est invoquée
# -o pipefail : Empêche une erreur masquée au sein d'un pipeline de commandes (cmd1 | cmd2)
# IFS : Définit les séparateurs par défaut sur saut de ligne et tabulation (évite les bugs liés aux espaces)

2. Traitement avancé des flux textuels : sed et awk

L’administrateur système manipule en permanence des flux de données non structurés pour extraire des informations d’audit ou réécrire des fichiers de configuration :

# sed : Remplacement ciblé par expressions régulières (Regex)
# Remplacer un paramètre dans un fichier sans écraser le reste
sed -i 's/^SELINUX=.*/SELINUX=enforcing/' /etc/selinux/config

# awk : Analyse tabulaire par colonnes et filtrage conditionnel
# Lister les utilisateurs humains (UID >= 1000) et leur shell
awk -F':' '$3 >= 1000 && $3 < 60000 { printf "Utilisateur: %-15s UID: %-5d Shell: %s
", $1, $3, $7 }' /etc/passwd

# Calculer la consommation totale de RAM d'un ensemble de processus
ps aux | grep '[n]ginx' | awk '{ sum += $6 } END { printf "RAM totale NGINX: %.2f Mo
", sum/1024 }'

3. Analyse des options et arguments avec getopts

Fournissez une interface ergonomique et documentée à vos outils d'exploitation grâce au mécanisme natif getopts :

#!/usr/bin/env bash
usage() {
    echo "Usage: $0 -d <répertoire> -retention <jours> [-v]"
    exit 1
}

VERBOSE=0
while getopts ":d:r:v" opt; do
    case "${opt}" in
        d) TARGET_DIR="${OPTARG}" ;;
        r) RETENTION_DAYS="${OPTARG}" ;;
        v) VERBOSE=1 ;;
        *) usage ;;
    esac
done

if [[ -z "${TARGET_DIR:-}" ]] || [[ -z "${RETENTION_DAYS:-}" ]]; then
    usage
fi

4. Nettoyage garanti avec les signaux et l'instruction trap

Assurez la suppression des fichiers temporaires même si l'utilisateur interrompt le script avec Ctrl+C :

TMP_FILE=$(mktemp /tmp/audit_sys.XXXXXX)
cleanup() {
    rm -f "$TMP_FILE"
    echo "[INFO] Nettoyage effectué avec succès."
}
trap cleanup EXIT INT TERM

Atelier Pratique : Concevez un script d'audit vérifiant le remplissage des disques. Si une partition dépasse 85%, le script génère un rapport horodaté dans /var/log/disk-alerts.log et renvoie un code de sortie d'erreur documenté.