Remplacé la dernière condition par la fonction ‘sortie_propre()’ à la fin de laquelle j’ai été obligé d’ajouter un ‘exit’, sinon le script continuait.
Vérifie bien ce point Michel.
Remplacé les ‘exit’ par l’appel à cette fonction, y-compris sur le point que tu as soulevé. Tu avais raison, en cas de faute sur le système de fichier, on avait l’alerte mais ça continuait et ça aurait planté, bien sûr.
Je crois avoir testé toutes les autres possibilités sans avoir rencontré d’erreur.
[code]#!/bin/bash
BEGIN INIT INFO
Nom du script : sauvegarde
Auteur : Ricardo, aidé de l’équipe de ‘debian-fr.org’
Date de création : juillet 2011
Utilité : faciliter les sauvegardes
Version : cette version est écrite pour l’utilisation avec deux partitions de sauvegarde, à alterner dans le temps.
#+ Il est souhaitable que ces partitions soient sur un DD différent de celui qui abrite le système
Description : script permettant d’effectuer, régulièrement et de façon simple, les sauvegardes de son système
Droits : entièrement libres mais en cas de copie, la citation de “debian-fr.org” nous serait agréable
Modifié le :
Objet de la modification :
END INIT INFO
#----------------- Fonctions ----------------------------
function test_sauvegarde()
{
sudo rsync -av --del --backup --backup-dir="$1" --exclude-from="$2" “$3” “$4”
# Teste si la sauvegarde a abouti ( = 0), sinon, on sort.
if (("$?" > 0))
then
printf "\nErreur lors de la sauvegarde de %s\n" "$3"
else
printf "\nSauvegarde de %s : OK\n" "$3"
fi
}
function sortie_propre()
{
if [ "$deja_montee" = 0 ]
then
sudo umount "$mount_rep"
else
# Si la partition de sauvegarde était déjà montée lors de l'appel, on sort sans la démonter.
sync
fi
exit
}
#----------------- Variables -------------------
mount_rep="/mnt/autre"
la première donnée, vide, figure le [0], de façon à commencer par [1]
ddext=(’’ ‘/dev/sdb9’ ‘/dev/sdb10’)
systeme_fich=(’’ ‘ext3’ ‘ext2’)
controle=(’’ ‘/home/controle’ ‘/home/controle-ricardo’)
exclure=(’’ ‘/root/exclure’ ‘/home/ricardo/.exclure’)
sauve=(’’ ‘/mnt/autre/sauve’ ‘/mnt/autre/sauve-ricardo’)
dossier_a_sauver=(’’ ‘/’ ‘/home/ricardo’)
#----------------- Départ du script ----------------------------
Teste l’existence des partitions de sauvegarde et celle du dossier de montage, sinon, on sort avec erreur 1.
[ -e "${ddext[1]}" ] && [ -e "${ddext[2]}" ] || { echo "Le DDext ne répond pas !" >&2; exit 1; }
mkdir -p "$mount_rep" || { echo "Le dossier de montage n'existe pas !" >&2; exit 1; }
Choix de la sauvegarde. Si le montage ne s’effectue pas, on sort avec via la fonction ‘sortie_propre()’
deja_montee=0
PS3="Entrez le N° de la sauvegarde choisie : "
select sauvegarde in “sauve” “sauve2” quitter
do
case ${REPLY} in
[1-2])
index=${REPLY}
if ! grep -q “^${ddext[$index]} “$mount_rep” ${systeme_fich[$index]}” /etc/mtab
then
sudo mount -t “${systeme_fich[$index]}” “${ddext[$index]}” “$mount_rep” || sortie_propre
break
else
printf "Info : La partition ${ddext[$index]} est déjà montée\n"
deja_montee=1
break
fi
;;
3) echo “On sort du script”; sortie_propre
;;
*) echo “Saisie non valide !”
;;
esac
done
Teste si la corbeille est pleine (pésence de fichier(s) dans … /files), si elle l’est, liste les fichiers qu’elle contient
echo -e "\033[4mCONTENU de la CORBEILLE\033[0m\n"
if [ -e ~/.local/share/Trash/files/ ]
then
ls ~/.local/share/Trash/files
read -p "on peut la vider ? o/* : " corbeille
if [ “$corbeille” = o ]
then
rm -rf ~/.local/share/Trash/*
echo -e "\033[4mCORBEILLE VIDÉE\033[0m"
fi
else
echo "La corbeille est vide"
fi
Ordre de sauvegarde faisant appel à la fonction ‘test_sauvegarde’
read -p "prêt pour la sauvegarde ? o/* : " onyva
if [ “$onyva” = o ]
then
for((index=1; index < ${#controle[@]}; index++))
do
test_sauvegarde “${controle[$index]}” “${exclure[$index]}” “${dossier_a_sauver[$index]}” “${sauve[$index]}”
done
else
sortie_propre
fi
[/code]