Bash de A à Z

Chapitre 6 / 6

Projet : un script de sauvegarde complet

L'objectif

On combine tout ce qu'on a vu pour écrire un vrai script d'administration : sauvegarder un dossier dans une archive datée, avec vérifications, journalisation et code de retour propre.

Les redirections, en rappel

SymboleEffet
>rediriger la sortie (écrase)
>>rediriger en ajoutant
2>rediriger les erreurs
|envoyer la sortie vers une autre commande

Le script

#!/bin/bash
# sauvegarde.sh — archive un dossier dans une destination datée.
# Usage : ./sauvegarde.sh <source> <destination>

set -euo pipefail        # arrêt si erreur, variable non définie ou pipe cassé

source="$1"
destination="$2"
journal="/var/log/sauvegarde.log"

log() { echo "[$(date +%F_%T)] $1" | tee -a "$journal"; }

# 1. Vérifications
if [ "$#" -ne 2 ]; then
  echo "Usage : $0 <source> <destination>"
  exit 1
fi
if [ ! -d "$source" ]; then
  log "ERREUR : source introuvable ($source)"
  exit 1
fi
mkdir -p "$destination"

# 2. Archivage
archive="$destination/backup-$(date +%F).tar.gz"
if tar -czf "$archive" "$source"; then
  log "Sauvegarde OK → $archive"
else
  log "ERREUR : échec de l'archivage"
  exit 1
fi

# 3. Nettoyage : garder les 7 dernières archives
ls -1t "$destination"/backup-*.tar.gz | tail -n +8 | while read vieux; do
  rm -f "$vieux"
  log "Ancienne archive supprimée : $vieux"
done

Ce qu'il illustre

  • set -euo pipefail : rend le script robuste (il s'arrête à la première erreur au lieu de continuer dans le vide).
  • une fonction log() qui écrit à l'écran et dans un journal (tee -a).
  • des vérifications ($#, -d) avec exit 1 en cas de problème.
  • un enchaînement tar … | tail | while read pour la rotation des archives.

💡 Va plus loin : ajoute une notification en fin de script (mail, ou une requête curl vers ntfy — voir l'article de blog !), et planifie-le avec cron pour une sauvegarde automatique chaque nuit.

Félicitations 🎉

Tu as parcouru Bash de A à Z : shell, variables, conditions, boucles, fonctions et un vrai script d'administration. La suite, c'est la pratique : automatise tes propres tâches, c'est comme ça qu'on progresse le plus vite.