Bonjour,
voici réduite au minimum, la structure d’un script de sauvegarde.
Le script fonctionne dans l’état où je vous le présente, mais à condition que le choix des options ne soit pas dans une fonction.
Est-ce une erreur dans la structure de ce script, ou mon ambition n’est-elle pas adaptée à bash? (version 5)
Merci pour votre attention
#!/bin/bash --
#set -eu #o pipefail
MONHOME(){
}
# Configuration:
readonly EXCLUS="/usr/local/etc/excludeRsyncSeagate4t-bkp.txt"
readonly DevSeagate='/dev/mapper/seagateUSB4T-bkp'
# Si nécessaire, point de montage par ce script:
PTMONTAGE="/mnt/Seagate4T-bkp"
# Source = tout (système inclu)
SOURCE="/"
# Variables de travail
readonly CeScript=$(basename "$0")
DATE=$(date +%F_%s | cut -b 1-11,17-21)
CONNEXION() {
# est-il connecté?
}
MONTER() {
# Découvrir ou creer le point de montage
# Options par défaults:
USBDIR="$MONTE"
INFOS() {
exit 0
}
SYNTAXE() {
MESSAGE "Syntaxe de $CeScript"
echo
echo "$CeScript [options]"
echo
MESSAGE "Options:"
echo "-d dry-run"
echo "-o <liste> autres options de rsync"
echo "-i infos sur ce script"
echo "-h cet écran d'aide"
exit 0
}
#--#OPTIONS() { # BUG: ça ne marche pas dans une fonction
# GESTION DES OPTIONS:
while getopts diho: option
do
case "$option" in
d ) OPTION='--dry-run'
;;
o ) OPTION="${OPTION} $OPTARG"
;;
i ) INFOS ; exit 0
;;
h ) SYNTAXE
exit 0
;;
* ) MESSAGE "OPTION $OPTION non valide"
exit 1
esac
done
shift $((OPTIND-1))
#--#}
RSYNC() {
### Construction de la commande rsync:
DESTINATION="$MONTE"
time sudo rsync -auHAXCvv "$OPTION" --stats --exclude-from="$EXCLUS" "$SOURCE" "$DESTINATION"
}
DEMONTER() {
}
### Lancement du programme:
MONHOME # racine des données partagées selon le système
CONNECTION # vérifie que le disque USB est connecté
MONTER # vérifie que le disque USB monté, sinon le monte
#--#OPTIONS
RSYNC # lancement de commande rsync, construite notamment en fonction des options
DEMONTER # Demande avant de démonter le disque USB.