Forum Clubic

[scrip shell] script de backup qui mer....[RESOLU] - bad interpreter !

bonjour, je vooulais faire un script de backup mais j’ai des erreur et je ne voi pas pourquoi. voici mon script:


##########################################
#!/bin/bash
#DATEJOUR=`date +'%w'`
DATEJOUR=`date +'%d'-'%m'-'%y'_'%H'-'%M'`
DATE=`date`


MAIL="" #Mail de la personne qui recevra le rapport
CHEMIN="/root/backup/save" # Chemin de la sauvegarde (sans le '/' à la fin)

######logs######
echo "===== Rapport de sauvegarde =====" > /root/backup/result_backup.txt

if [ "$1" = "increment" ]
then
DATEOLD=`cat date.increment.dump`
tar -c -G -v -z -f $CHEMIN/backup_increment.tar.gz -b 126 -N "$DATEOLD" -V "Sauvegarde du $DATEOLD au $DATE" $2 $3 $4 $5 $6 $7 $8 $9 >> /root/backup/result_backup.txt
echo $DATE > date.increment.dump


mais qd je lance mon script: ./Backup.sh increment /root/Dossier/

il me dit:
cat: date.increment.dump: Aucun fichier ou répertoire de ce type
pourtant, mon fichier date.increment.dump est bien cree et rempli !!!!

si qq’un a une idée… merci

et lorque je relance sans rien changer, il me met:

./Backup.sh increment /root/Dossier
tar: Substitution de 1970-01-01 00:59:59 pour un format inconnu de date mer nov 16 12:11:00 CET 2005' tar: Retrait de l'en-tête/’ des noms des membres

fo bien mettre date pour l’argument -N ???

Une remarque toute bête, peut être faut-il que tu t’assures que ton script ne se trompe pas de chemin d’accès à ton fichier “date.increment.dump”.
Ajoute le chemin complet au fichier lors du cat.

Pour le tar, je ne sais pas…

Bon alors j’ai resolu UN problème mais maintenent, y’en a un autre, cela fonctionne tres bien sur une red hat 9 et des que je met mon script sur mon serveur de backup, paf, ca plante !!!



##########################################
#!/bin/bash
DATE=`date +'%Y-%m-%d %H:%M:%S'`
DATE_BAC=`date +'%Y-%m-%d_%Hh%Mm%Ss'`
CHEMIN_SAUVEGARDE=$2 # Chemin de la sauvegarde (sans le '/' à la fin)
CHEMIN_DONNEES="/root/backup"
FICHIER="$CHEMIN_DONNEES/date.increment.dump"

if [ -f $FICHIER ] #si pas de date de dernier backup alors on fait un backup total a la place
then
MODE="$1"
else
MODE="TOT"
fi


##############log###############
echo "===== Rapport de sauvegarde =====" > $CHEMIN_DONNEES/result_backup.txt

######incrementielle############
if [ "$MODE" = "INC" ]
then
DATEOLD=`cat $CHEMIN_DONNEES/date.increment.dump`

tar -c -G -v -z -f $CHEMIN_SAUVEGARDE/backup_inc_$DATE_BAC.tar.gz -b 126 -N "$DATEOLD" -V "Sauvegarde du $DATEOLD au $DATE" $3 $4 $5 $6 $7 $8 $9 >> $CHEMIN_DONNEES/result_backup.txt

echo $DATE > $CHEMIN_DONNEES/date.increment.dump


#############totale##############
elif [ "$MODE" = "TOT" ]
then
tar -c -G -v -z -f $CHEMIN_SAUVEGARDE/backup_tot_$DATE_BAC.tar.gz -b 126 -V "Sauvegarde du $DATE" $3 $4 $5 $6 $7 $8 $9 >> $CHEMIN_DONNEES/result_backup.txt

echo $DATE > $CHEMIN_DONNEES/date.increment.dump
else

echo "Problème de paramètres--> syntaxe: ./Backup.sh mode dest src1 src2 src3 ...."
echo "-----------------------------------------"
echo "Backup Complet:"
echo "./backup.sh TOT média_ou_enregistrer dossier_a_sauver dossier2 dossier3  ... "
echo "Copie total du dossier mi en paramettre"
echo "-----------------------------------------"
echo "Backup incremental:"
echo "./backup.sh INC média_ou_enregister dossier_a_sauver dossier2 dossier3 ..."
echo "Seul les fichiers ajouté ou modifié depuis le dernier backup sera ajouté "
echo "-----------------------------------------"
echo "Exemple: ./Backup.sh INC /dev/st0 /mnt/NDdujour/"
echo "-----------------------------------------"
fi


###########fin du log envoie par mail#########

mail -s Backup_$3 $MAIL < "$CHEMIN_DONNEES/result_backup.txt"
rm $CHEMIN_DONNEES/result_backup.txt
################################################


Donc voila, sur un pc, ca marche nikel, sur l’autre pas !!! (j’ai evidement mi les bon rep !!) il me dit:

: command not found
./backup.sh: line 34: syntax error near unexpected token elif' '/backup.sh: line 34:elif ["$MODE" = “TOT” ]

etrange non??
Edité le 03/09/2008 à 14:59

Euh… Question toute bête :
Dans ton code y a bien un espace en le “[” et ta variable “$MODE” ?
Sinon essaye d’enlever les guillemets pour exprimer tes variables dans les tests d’égalités.

alors la incroyable, j’ai mi tt mon code en commentaire et la, il me met:

: bad interpreter: No such file or directory

alors que j’ai pourtant mi:


#!/bin/bash

en debut de ligne !!!

j’ai essayé aussi


#!/bin/sh

mais ca donne la meme chose
si qq’un a une idée, merci

ps, je suis sur une distrib: sme serveur

pour lancer un script, il faut des librairie de base? parce que il me semble que le sme serveur est vraiment tres light et pour des raison de securité, y’a pas de couche de compil??? !!!

deja tu pourrais incrementer ton p*tin de code tu ferais moins d’erreur lol

deuxion la ligne #!/bin/bash doit etre la premier !!!!
pas la deuxieme pas la troisieme !!!! la premiere !

ps si tu t en sort pas en shell tu peut faire du php

en tapant #!/bin/php (si il est la)

et bien ma fois, c’est pareil, j’ai bien mi #!/bin/sh a la premiere ligne, premier caractère.

j’ai essayé aussi #!/bin/bash

j’ai toujours la meme erreur: : bad interpreter: No such file or directory

je comprend vraiment pas, je pense que ca viens de la distrib car j’ai testé ce meme code sur une red hat 9 et ca tourne nickel, donc ca viens de mon sme serveur, mais je sais pas pourquoi !!!

Bon et bien j’ai resolu l’affaire, ca devait etre le fichier qui etait conrompu ou les 2 version de linux imcompatible car j’ai cree un nouveau script a parti de sme cette fois et fait coppier coller du script et la ca marche !!!

donc maintenent, j’ai n autre souci, dans mon script, je met le chemin ou je veux suver l’archive en param. si je met un rep de mon sme, tt fonctionne bien, mais moi, je veux sauver sur bande. mais qd je met /dev/st0, il me met:


/dev/st0/backup_tot_2005-11-22_20h23m33s.tar.gz: Cannot open: N'est pas un répertoire
tar (child): Error is not recoverable: exiting now
./backup.sh: line 51: 10622 Relais brisé (pipe)     tar -c -G -v -z -f $CHEMIN_SAUVEGARDE/backup_tot_$DATE_BAC.tar.gz -b 126 -V "Sauvegarde du $DATE" $3 $4 $5 $6 $7 $8 $9 >>$CHEMIN_DONNEES/result_backup.txt

mais pourtant, le device st0 est monté !!!

si qq’un a ne idée

Le problème c’est que tar (TApe Recorder) est (historiquement) une appli pour écrire directement sur les bandes qui sont dépourvues de système de fichier mais par contre qui gère tout ce qui est incrémentation etc… Donc à mon avis t’as fait beaucoup de script pour rien et je t’invite à taper un man tar

mais en tout cas la syntaxe est à mon avis (si quelqu’un pouvait confirmer)
tar -f /dev/st0

et pas tar -f /dev/st0/fichier qui est absurde… st0 est une block device pas un répertoire.