Aller au contenu

Script Shell


lea

Messages recommandés

Bonjour,

j'ai enfin réussi à écrire mon script mais quand je l'exécute ça génère des erreurs. Voici les erreurs et le script.

Si vous avez des idées soyez les bienvenus merci.

erreur

stage@ubuntu:~$ ./script.sh

: command not found:

: command not found:

: command not found4:

la semaine correspondant à la date actuelle est 18

: command not found2:

./script.sh: line 62: syntax error near unexpected token `fi'

./script.sh: line 62: ` fi'

stage@ubuntu:~$

script

#!/bin/sh

# Le premier cron sera exécuté toutes les dimanche à 12h00

# Le deuxième cron sera exécuté tous les mois à 12h00

#00 12 * * 0 /home/utilisateur/mybackups.sh >>/home/utilisateur/backups_automatises.log 1>&2

#00 12 * 0 * /home/utilisateur/mybackups.sh >>/home/utilisateur/backups_automatises.log 1>&2

# Ce script est a appeler dans la crontab :

# ~$ crontab -e

# Ce script sera execute à 12h00 tous les dimanches et tous les mois

une_semaine=$(date --date '1 week ago' +%Y%m%d) #le nombre de mois dans l'année

nbrtot_semaine=$(date --date '53 weeks ago' +%Y%m%d) #le nombre de semaines dans l'année est égale à 53

un_mois=$(date --date '4 weeks ago' +%Y%m%d)

points_trimestriels=(1 13 26 39 53)

points_mensuels=(1 4 9 13 17 22 26 30 35 39 43 48 53)

date_actuelle=$(date +%W) #donne le numéro de la semaine dans l'année

echo "la semaine correspondant à la date actuelle est $date_actuelle"

x=1

nbr_sauvegarde_hebdomadaire=4

nbr_sauvegarde_mensuelle=5

supprimer ()

{

rep1=$1

rep2=$2

for index in "${!points_mensuels[@]}";do

for index in "${!points_trimestriels[@]}";do

echo ${points_mensuels[$index]}

echo ${points_trimestriels[$index]}

if [ "${date_actuelle}"- "${nbr_sauvegarde_hebdomadaire}" != "${points_mensuels} || ${points_trimestriels}" ]

then

/rm -rf "${rep1}_${une_semaine}.tar.gz" >> "$log" 2>> "$log"

echo "Le fichier ${rep1}_${une_semaine}.tar.gz a ete supprime" >> "$log"

else

echo " Ne pas supprimer les points mensuels ou trimestriels "

fi

echo "" >> "$log"

for x in $seq 12

do

if [ "${date_actuelle}"== "${points_mensuels}" ]

then

${nbr_sauvegarde_mensuelle}=[${(x/3)*13 + (x%3)*4}]

if [ "${date_actuelle}"-"${nbr_sauvegarde_mensuelle}"!= "${points_trimestriels}"]

then

/rm -rf "${rep2}_${un_mois}.tar.gz" >> "$log" 2>> "$log"

echo "Supprimer car "${date_actuelle}" - "${nbr_sauvegarde_mensuelle}" n'est pas un point trimestriel"

else

echo "Ne pas supprimer les points trimestriels"

fi #C'EST ICI LIGNE 62

if [ "${date_actuelle}" - ("${nbr_sauvegarde_mensuelle}" -1) != "${points_trimestriels}" ]

then

/rm -rf "${rep2}_${un_mois}.tar.gz" >> "$log" 2>> "$log"

echo "Supprimer car ${date_actuelle} - ${nbr_sauvegarde_mensuelle} n'est pas un point trimestriel"

else

echo "Ne pas supprimer les points trimestriels"

fi

fi

done

if [ ${nbr_semaine} -eq ${nbrtot_semaine} ]

then

/rm -rf "${rep2}_${points_mensuels}.tar.gz" >> "$log" 2>> "$log"(les points_mensuels)

fi

if test -d "${rep2}_${date_actuelle}.tar.gz"

then

mv "${rep2}_${date_actuelle}.tar.gz" "${rep2}_${date_actuelle}_old.tar.gz" >> "$log" 2>> "$log"

echo "Le fichier ${rep2}_${date_actuelle}.tar.gz a ete renomme en ${rep2}_${date_du_jour}_old.tar.gz">>"$log"

fi

done

done

}

repertoire_racine="/home/stage"

log="backups_automatises.log"

cd "$repertoire_racine"

echo "***************************************************************************

*****" >> "$log"

echo "" >> "$log"

echo "SUPPRESSION DU `date +'%Y-%m-%d'` A `date +'%H:%M:%S'`" >> "$log"

echo "" >> "$log"

echo "" >> "$log"

mkdir "repertoire1"

mkdir "repertoire2"

#On prend chaque repertoire de sauvegarde du repertoire_racine

for rep in *. une_semaine

do

#appel de la fonction supprimer pour repertoire1

supprimer $rep1

done

for rep in *. un_mois

do

#appel de la fonction supprimer pour repertoire2

supprimer $rep2

done

exit o

Lien vers le commentaire
Partager sur d’autres sites

salut,

à mon avis il te manque des ' (simple quote) autour de +%Y%m%d dans tes trois premières commandes de date.

pour ton erreur à la ligne 62, c'est normal, il te faut utiliser elif plutot qu'un if quelquepart dans tes if/then/else

Le problème est qu'en fait tu imbriques mal les if/then/else.

Note par ailleurs que si tu indentais le code ce serait plus lisible.

Lien vers le commentaire
Partager sur d’autres sites

salut,

à mon avis il te manque des ' (simple quote) autour de +%Y%m%d dans tes trois premières commandes de date.

J'ai essayé de 3 façons différentes mais ça ne marche pas.

une_semaine='$(date --date '1 week ago' +%Y%m%d)'

une_semaine=$('date --date '1 week ago' +%Y%m%d')

une_semaine='date --date '1 week ago' +%Y%m%d'

J'ai aussi essayé au tour de %Y%m%d ça ne marche pas non plus

une_semaine=$(date --date '1 week ago' +'%Y%m%d')

Lien vers le commentaire
Partager sur d’autres sites

ah.

et qu'en est-il de une_semaine=$(date --date='1 week ago' +%Y%m%d) ?

Lorsque je l'exécute tout seul sur le terminal tout se passe normale de même que pour un_mois et nbrtot_semaine.

stage@ubuntu:~$ une_semaine=$(date --date '1 week ago' +%Y%m%d)

stage@ubuntu:~$ echo $une_semaine

20090430

stage@ubuntu:~$ un_mois=$(date --date '4 weeks ago' +'%Y%m%d')

stage@ubuntu:~$ echo $un_mois

20090409

stage@ubuntu:~$ nbrtot_semaine=$(date --date '53 weeks ago' +'%Y%m%d')

stage@ubuntu:~$ echo $nbrtot_semaine

20080501

stage@ubuntu:~$

Lien vers le commentaire
Partager sur d’autres sites

chez moi

#!/bin/sh

 une_semaine=`date --date='1 week ago' +%Y%m%d`

 echo $une_semaine

fonctionne parfaitement.

Attention les cotes autour de la commande ne sont pas les mêmes qu'autour de la chaine de caractère.

Si ça marche j'avais confondu les quotes. Merci

Pour elif j'ai essayé mais ça marche pas.

Lien vers le commentaire
Partager sur d’autres sites

Archivé

Ce sujet est désormais archivé et ne peut plus recevoir de nouvelles réponses.

×
×
  • Créer...

Information importante

Nous avons placé des cookies sur votre appareil pour aider à améliorer ce site. Vous pouvez choisir d’ajuster vos paramètres de cookie, sinon nous supposerons que vous êtes d’accord pour continuer.