Problème de condition dans un script bash

Fermé
kwatuve - 17 janv. 2008 à 06:24
 kwatuve - 17 janv. 2008 à 12:48
Bonjour,

j'ai un petit probleme de syntaxe pour mon script dans la phase de suppression...
c'est un petit script mais avec pas mal de commande





#!/bin/bash
################################################################################
################################################################################
# Script de sauvegarde des home
# Nom du fichier : denis_home_backup.sh
# Version 2008.01.08
# Auteur Ikwatuve
#
# Description :
# - sauvegarde de 5 jours en arriere
# - archive par semaine sur 4 semaines
# - archive par mois
#
# cp du jour precedent, puis rsync dessus
#
# (pour compte rendu par mail)
# -doit donner dans un fichier, heure debut et heure fin (20h00 21h00)
# -dans un autre fichier la sortie des erreurs
################################################################################
################################################################################


################################################################################
# Definition des variables

################################################################################

# fichier de log
LOG=/var/log/denis_home_backup.log

# fichier de rapport
RAPPORT=/var/log/rapport.txt

# date d'hier qui sera calculee par le script
HIER=""

# date du jour
JOUR=`date +%Y%m%d`

# serveur distant sur lequel faire la sauvegarde
SVG=***@svg01

# dossier source sur la machine locale a sauvegarder
SRCDIR=/home/*

# dossier destination de la sauvegarde sur $SRV
DESTDIR=/mnt/disque01/users/

# dossier archive des sauvegardes de la semaine en cours sur $SRV
DAYDIR=/mnt/disque02/archive/users/

# dossier archive des sauvegardes des semaines passees sur $SRV
WEEKDIR=/mnt/disque02/archive/users/semaines/

# dossier archive des sauvegardes des mois passes sur $SRV
MONTHDIR=/mnt/disque02/archive/users/mois/

# fin de la definition des variables
set -u


################################################################################
# Definition des fonctions du script (pour appel des fonctions pas encore fait)

################################################################################

# fonction pour arret critique du script (pas encore fait)




################################################################################
################################################################################
################################################################################
# MAIN
################################################################################
################################################################################

################################################################################
# Verification des parametres pour le bon deroulement du script
################################################################################

# exists
#creer
if [ ! -e $LOG ]; then
echo "creation du fichier $LOG";
touch $LOG;
fi

# verification des droits sur $LOG
# le log va etre diriger vers le mail du CRON
if [ ! -w $LOG ]; then
echo "ERREUR ouverture pour ecriture du fichier $LOG";
exit 1;
fi


if [ ! -e $RAPPORT ]; then
echo "creation du fichier $RAPPORT";
touch $RAPPORT;
fi

# verification des droits sur $RAPPORT
if [ ! -w $RAPPORT ]; then
echo "ERREUR ouverture pour ecriture du fichier $RAPPORT";
exit 1;
fi

################################################################################
# Debut du traitement

################################################################################

# afficher heure de debut
echo "start :" `date +%Y%m%d-%H:%M:%S` >> $LOG

# definition de la date $HIER

if(( `date +%u` == 5 )); then
# on est vendredi
HIER=`date +%Y%m%d --date="-3day"`;
else
# on n'est pas vendredi
HIER=`date +%Y%m%d --date="-1day"`;
fi

# on archive la sauvegarde de $HIER
ssh $SVG "cp -r $DESTDIR/$HIER $DAYDIR/" 2>> $LOG

# test du retour de la commande
# (APPELER UNE FONCTION)
if(( $? != 0 )); then
echo "ERREUR sur cp de $HIER";
exit 1;
fi


# si on est vendredi on effectue la sauvegarde hebdomadaire dans $WEEKDIR
if((`date +%u` == 5 )); then
ssh $SVG "cp -r $DAYDIR/`date +%Y%m%d --date="-7day"` $WEEKDIR/" 2>> $LOG;
fi

# test du retour de la commande
# (APPELER UNE FONCTION)
if(( $? != 0 )); then
echo "ERREUR sur cp dans $WEEKDIR";
exit 1;
fi

# si $HIER et $JOUR changent de mois, on effectue la sauvegarde mensuelle
if [ ${HIER:0:6} != ${JOUR:0:6} ]; then
ssh $SVG "cp -r $DESTDIR/$HIER $MONTHDIR/" 2>> $LOG;
fi

# test du retour de la commande
# (APPELER UNE FONCTION)
if(( $? != 0 )); then
echo "ERREUR sur cp dans MONTHDIR";
exit 1;
fi

# on renomme la sauvegarde de $HIER pour aujourd'hui
ssh $SVG "mv $DESTDIR/$HIER $DESTDIR/$JOUR" 2>> $LOG

# test du retour de la commande
if(( $? != 0 )); then
echo "ERREUR sur mv de $HIER vers $JOUR";
exit 1;
fi
################################################################################

#Synchronisation des dossiers

################################################################################

# on synchronise la sauvegarde d'aujourd'hui
rsync -a $SRCDIR $SVG:$DESTDIR/$JOUR 2>> $LOG

# test du retour de la commande
if(( $? != 0 )); then
echo "ERREUR de synchro de $JOUR";
exit 1;
fi

################################################################################

#Suppression des dossiers

################################################################################

# on supprime la sauvegarde du meme jour mais de la semaine precedente
if [ `ssh ***@svg01 "if [ -e $DAYDIR/\`date +%Y%m%d --date=\"-7day\"\` ]; then echo OK; else echo NO; fi"` == "OK" ]; then
ssh $SVG "rm -r $DAYDIR/`date +%Y%m%d --date=\"-7day\"`" 2>> $LOG
else

fi
# test du retour de la commande
if(( $? != 0 )); then
echo "ERREUR suppression de $DAYDIR/`date +%Y%m%d --date=\"-7day\"`";
exit 1;
fi

# si on est vendredi on efface la sauvegarde de vendredi il y a 4 semaines
if ((`date +%u` == 5 && -e )); then
ssh $SVG "rm -r $WEEKDIR/`date +%Y%m%d --date=\"-4week\"`" 2>> $LOG
fi;

# test du retour de la commande
if(( $? != 0 )); then
echo "ERREUR suppression de WEEK -4";
exit 1;
fi

# afficher heure de fin
echo "finished :" `date +%Y%m%d-%H:%M:%S` >> $LOG
A voir également:

5 réponses

lami20j Messages postés 21331 Date d'inscription jeudi 4 novembre 2004 Statut Modérateur, Contributeur sécurité Dernière intervention 30 octobre 2019 3 569
17 janv. 2008 à 07:39
Salut,


ssh $SVG "rm -r $DAYDIR/`date +%Y%m%d --date=\"-7day\"`" 2>> $LOG
essai
date --date '7 days ago'
ssh $SVG "rm -r $WEEKDIR/`date +%Y%m%d --date=\"-4week\"`" 2>> $LOG
essai
date --date '4 weeks ago'
1
dubcek Messages postés 18767 Date d'inscription lundi 15 janvier 2007 Statut Contributeur Dernière intervention 5 mars 2025 5 628
17 janv. 2008 à 09:42
hello
utiliser rm -f , pas besoin de test
-f, --force
ignore nonexistent files, never prompt
1
Est-ce que tu pourrais nous donner le message d'erreur??
0
message d'erreur

start : 20080115-15:19:24
rm: ne peut enlever `/mnt/disque02/archive/users//20080108': Aucun fichier ou repertoire de ce type


en fait je souhaite dire au script si le dossier existe supprimer le dossier sinon

je vais tenter déjà la commande "ago" ca m'a l'air interressant

mais ca ne résoud pas le problème de la condition "dans la condition" (imbriqué en fait...)
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
l'option -f je n'y avait pas pensé

ca devrait faire sauter le problème !!

en vous remerciant!
0