#1 Le 08/09/2010, à 09:43
- Tortue Géniale
Script backup non fonctionnel
Bonjour,
Pour m'entrainer à écrire des scripts, j'ai voulu créer un script effectuant une sauvegarde. Or celui-ci ne veut pas fonctionner. Le voici :
#!/bin/bash
source='/media/DONNEES/Mes\ documents'
destination='/media/BACKUP/Mes\ documents'
reponse=''
continuer=1
echo '--- Script de backup ---'
while [ $continuer = 1 ]
do
echo ''
read -p 'Pour changer les répertoires par défaut, taper \'c\', sinon taper \'Entrée\' :' -n 1 reponse
if [ $reponse != 'c' ]
then
echo 'Utilisation des répertoires par défaut'
else
read -p 'Choisir la source :' source
read -p 'Choisir la destination :' destination
fi
reponse=''
echo 'Source : ' + $source + ' .'
echo 'Destination : ' + $destination + ' .'
while [ $reponse != 'o' && $reponse != 'n' ]
do
read -p 'Etes vous sûr de vouloir lancer le backup? \'o\' pour \'Oui\', \'n\' pour \'Non\' :' -n 1 reponse
if [ $reponse = 'o' ]
then
echo ' --- Lancement du backup ---'
rsync -arvHu --delete --progress --stats --exclude=exemple.txt $source $destination > /$destination/log_backup_$DATE.txt
echo ' --- Backup effectué ---'
continuer=0
elif [ $reponse = 'n' ]
echo '--- Backup annulé ---'
read -p 'Taper \'r\' pour revenir au début du script, \'q\' pour quitter :' -n 1 reponse
if [ $reponse != 'r' ]
then
continuer=0
fi
fi
done
done
Je le lance avec la commande "./ScriptBackup.sh" et j'obtiens :
" --- Script de backup ---
./ScriptBackup.sh: line 39: Caractère de fin de fichier (EOF) prématuré lors de la recherche du « ' » correspondant
./ScriptBackup.sh: line 46: Erreur de syntaxe : fin de fichier prématurée "
Je ne vois pas l'anomalie . Par ailleurs, concernant la ligne 46, je n'en ai pas (le script ne comporte que 45 lignes)...
Hors ligne
#2 Le 08/09/2010, à 10:42
- credenhill
Re : Script backup non fonctionnel
hello
modifier la ligne 39 par
read -p 'Taper '\'r\'' pour revenir au début du script, '\'q\'' pour quitter :' -n 1 reponse
Hors ligne
#3 Le 08/09/2010, à 11:55
- sputnick
Re : Script backup non fonctionnel
read -n1 -p "taper 'r' pour revenir au début du script, 'q' pour quitter >>> "
echo $REPLY
On ne peut pas mettre d'array dans un string!
https://sputnick.fr/
Hors ligne
#4 Le 08/09/2010, à 12:12
- Tortue Géniale
Re : Script backup non fonctionnel
Merci pour votre aide. Pourquoi mettre des guillemets comme cela credenhill?
Sinon j'ai une nouvelle erreur plus loin :
--- Script de backup personnalisé ---
./ScriptBackup.sh: line 43: Erreur de syntaxe près du symbole inattendu « fi »
./ScriptBackup.sh: line 43: ` fi'
Là non plus je ne comprend pas
Dernière modification par Tortue Géniale (Le 08/09/2010, à 12:14)
Hors ligne
#5 Le 08/09/2010, à 12:24
- Josepe36
Re : Script backup non fonctionnel
je n'utilise jamais "elif" mais il me semble que a la fin de la derniére condition tu as un "fi" de trop, car si je me souviens elif n'en a pas besoin
Développeur distribution Hybryde
www.hybryde.org
Hors ligne
#6 Le 08/09/2010, à 12:28
- Josepe36
Re : Script backup non fonctionnel
@sputnick
décidement dés que j'ai l'occasion de te lire j'en apprend toujours.
tu as à mon gout un bash trés interessant, j'aime cette façon d'utiliser read et de recuperer la valeur par le biais de $REPLY.
Allez ça c'est une connaissance de plus, merci
Développeur distribution Hybryde
www.hybryde.org
Hors ligne
#7 Le 08/09/2010, à 12:38
- credenhill
Re : Script backup non fonctionnel
Merci pour votre aide. Pourquoi mettre des guillemets comme cela credenhill(
la protection de ' entre ' est différente de "
$ echo "aa\"bb"
aa"bb
$ echo 'aa'\''bb'
aa'bb
$ echo "aa'bb"
aa'bb
$ echo 'aa"bb'
aa"bb
$
Hors ligne
#8 Le 08/09/2010, à 12:51
- sputnick
Re : Script backup non fonctionnel
@sputnick
décidement dés que j'ai l'occasion de te lire j'en apprend toujours.
tu as à mon gout un bash trés interessant, j'aime cette façon d'utiliser read et de recuperer la valeur par le biais de $REPLY.
Allez ça c'est une connaissance de plus, merci
content que ça puisse te servir
On ne peut pas mettre d'array dans un string!
https://sputnick.fr/
Hors ligne
#9 Le 08/09/2010, à 12:57
- credenhill
Re : Script backup non fonctionnel
Sinon j'ai une nouvelle erreur plus loin :
il manque un then
elif [ $reponse = 'n' ] ; then
Hors ligne
#10 Le 08/09/2010, à 13:03
- Josepe36
Re : Script backup non fonctionnel
elif [ $reponse = 'n' ]
echo '--- Backup annulé ---'
read -p 'Taper \'r\' pour revenir au début du script, \'q\' pour quitter :' -n 1 reponse
if [ $reponse != 'r' ]
then
continuer=0
oui tu as raison je pense.
j'ai dit une sotise quand au nombre de fi alors, effectivement je pense que tu as vu juste, il manque un then.
Développeur distribution Hybryde
www.hybryde.org
Hors ligne
#11 Le 08/09/2010, à 13:09
- credenhill
Re : Script backup non fonctionnel
je n'aime pas non plus les if & elif imbriqués ...
Hors ligne
#12 Le 08/09/2010, à 19:15
- Tortue Géniale
Re : Script backup non fonctionnel
Merci. J'avance mais ça ne marche toujours pas!
--- Script de backup personnalisé ---
Pour changer les répertoires par défaut, taper \c',c
./ScriptBackup.sh: ligne 13 : read: « 'Entrée' » : identifiant non valable
./ScriptBackup.sh: ligne 39 : [: != : opérateur unaire attendu
Décidemment c'est compliqué le bash...
Hors ligne
#13 Le 09/09/2010, à 06:47
- Totor
Re : Script backup non fonctionnel
read -n1 -p "Pour changer les répertoires par défaut, taper 'c', sinon taper 'Entrée' :"
if [ "${REPLY}" != "c" ]
then
echo 'Utilisation des répertoires par défaut'
else
read -p 'Choisir la source :' source
read -p 'Choisir la destination :' destination
fi
-- Lucid Lynx --
Hors ligne
#14 Le 09/09/2010, à 08:28
- nesthib
Re : Script backup non fonctionnel
Une façon assez lisible de remplacer tes tests imbriqués :
while true; do
read -n1 -p "test : "
case $REPLY in
o|O) echo "oui"; break ;;
n|N) echo "non"; break ;;
*) echo "oui ou non pas $REPLY" ;;
esac
done
tu peux mettre autant de commandes que tu veux à la place des "echo …"
@sputnick et Totor : o/ quoi de neuf ? moi c'est pas mal de boulot en ce moment
GUL Bordeaux : Giroll – Services libres : TdCT.org
Hide in your shell, scripts & astuces : applications dans un tunnel – smart wget – trouver des pdf – install. auto de paquets – sauvegarde auto – ♥ awk
⃛ɹǝsn xnuᴉꞁ uʍop-ǝpᴉsdn
Hors ligne
#15 Le 09/09/2010, à 14:24
- sputnick
Re : Script backup non fonctionnel
@nesthib salut ! pour ma part, ça à tendance à se confirmer pour une licence pro en dev. Totor et moi sommes pas mal actifs ici ces temps ci ^^ Welcome back !
On ne peut pas mettre d'array dans un string!
https://sputnick.fr/
Hors ligne
#16 Le 09/09/2010, à 18:00
- Josepe36
Re : Script backup non fonctionnel
bonsoir à tous
c'est génial vos bouts de codes, merci.
a+
Développeur distribution Hybryde
www.hybryde.org
Hors ligne
#17 Le 09/09/2010, à 19:33
- Totor
Re : Script backup non fonctionnel
@nesthib salut ! pour ma part, ça à tendance à se confirmer pour une licence pro en dev. Totor et moi sommes pas mal actifs ici ces temps ci ^^ Welcome back !
En fait, Sputnick assure la permanence entre 15h et 3h et moi entre 7h30 / 16h (avec plus ou moins du débordement et de souplesse !)
Mais sinon, j'ai des pics d'activités fluctuant coté taf... et en ce moment, c'est plutôt raisonnable, c'est pourquoi je suis assez présent. La rentrée étant passée, y'a également moins de demande !
-- Lucid Lynx --
Hors ligne
#18 Le 10/09/2010, à 13:51
- Tortue Géniale
Re : Script backup non fonctionnel
J'édite ce messsage qui n'a plus lieu d'être car ça semble enfin fonctionner
Voici le code que j'ai utilisé :
#!/bin/bash
source='/media/DONNEES/Mes\ documents'
destination='/media/BACKUP/Mes\ documents'
reponse=''
quitter=''
continuer=1
echo '--- Script de backup personnalisé ---'
while [ $continuer = 1 ]
do
echo ''
read -n1 -p "Pour changer les répertoires par défaut, taper 'c', sinon taper 'Entrée' :"
if [ "${REPLY}" != 'c' ]
then
echo "Utilisation des répertoires par défaut."
else
echo ''
read -p "Choisir la source :" source
echo ''
read -p "Choisir la destination :" destination
echo ''
fi
reponse=''
echo "Source : $source ."
echo "Destination : $destination ."
while [ "$reponse" != 'o' ] && [ "$reponse" != 'n' ]
do
echo ''
read -n1 -p "Etes vous sûr de vouloir lancer le backup? 'o' pour 'Oui', 'n' pour 'Non' :" reponse
if [ "$reponse" = 'o' ]
then
echo ''
echo '--- Lancement du backup ---'
rsync -arvHu --delete --progress --stats --exclude=Thumbs.db --exclude=Desktop.ini $source $destination > /$destination/log_backup_$DATE.txt
echo ''
echo '--- Backup effectué ---'
continuer=0
elif [ "$reponse" = 'n' ] ; then
echo ''
echo '--- Backup annulé ---'
echo ''
read -n1 -p "Taper 'r' pour revenir au début du script, 'q' pour quitter :" quitter
if [ "$quitter" != 'r' ]
then
continuer=0
echo ''
fi
fi
done
done
Petite question : concernant le if [ "${REPLY}" != "c" ] , pourquoi utilisez-vous des accolades autour du REPLY?
En tout cas un grand merci à vous pour m'avoir aidé
Dernière modification par Tortue Géniale (Le 10/09/2010, à 14:53)
Hors ligne
#19 Le 10/09/2010, à 14:01
- sputnick
Re : Script backup non fonctionnel
Utilise la forme de test [[ $var ]] à la place de tes [ $var ] tu ne devrais plus avoir ce problème pour "opérateur unaire attendu".
Pour le reste, moi je lache, on te donne des solutions propres que tu n'utilise pas et qui cause problème. ( ./viewtopic.php?pid=3715323#p3715323 )
edit : lien relatif
Dernière modification par nesthib (Le 10/09/2010, à 16:01)
On ne peut pas mettre d'array dans un string!
https://sputnick.fr/
Hors ligne
#20 Le 10/09/2010, à 14:57
- Tortue Géniale
Re : Script backup non fonctionnel
@sputnick
En fait j'ai pas compris ou pas fait attention à certains trucs parfois, et du coup je voulais déjà essayé via mon code "de départ". Mais je peux t'assurer que j'ai bien noté tes remarques (et celles des autres), et que je vais maintenant essayer de l'améliorer seul grâce à vos conseils. Voila. Merci.
ps : j'ai mis le temps à comprendre, le fonctionnement des différentes guillemets...:rolleyes:
Dernière modification par Tortue Géniale (Le 10/09/2010, à 14:59)
Hors ligne
#21 Le 10/09/2010, à 16:07
- nesthib
Re : Script backup non fonctionnel
la notation entre accolades permet de définir les bornes du nom de variable, un exemple :
for num in {1..10}
do
echo fichier${num}.txt
done
sinon essaie vraiment d'utiliser le case, là ça fait un peu programmation en BASIC ^^
@sputnick : pense aux liens relatifs
GUL Bordeaux : Giroll – Services libres : TdCT.org
Hide in your shell, scripts & astuces : applications dans un tunnel – smart wget – trouver des pdf – install. auto de paquets – sauvegarde auto – ♥ awk
⃛ɹǝsn xnuᴉꞁ uʍop-ǝpᴉsdn
Hors ligne