Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#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 hmm . 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

hmm

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 sad

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

Tortue Géniale a écrit :

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

Josepe36 a écrit :

@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

wink

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

Tortue Géniale a écrit :

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 smile


GUL Bordeaux : GirollServices libres : TdCT.org
Hide in your shell, scripts & astuces :  applications dans un tunnelsmart wgettrouver des pdfinstall. auto de paquetssauvegarde 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

sputnick a écrit :

@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 wink (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 smile
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é wink

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 ) roll

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 wink


GUL Bordeaux : GirollServices libres : TdCT.org
Hide in your shell, scripts & astuces :  applications dans un tunnelsmart wgettrouver des pdfinstall. auto de paquetssauvegarde auto♥ awk
  ⃛ɹǝsn xnuᴉꞁ uʍop-ǝpᴉsdn

Hors ligne