Probleme de syntaxe dans ma boucle while
Résolu
artanis
-
artanis -
artanis -
Bonjour,
je dois faire un petit bash pour automatiser la récupération de documentations sur un site
et il doit s'éffectuer toutes les 4 semaines
j'ai fais une ébauche mais au moment de le tester le terminal me dit qu'il y a une erreur de syntaxe a la ligne 41 et ferme prématurément mon programme
ce qui m'ennuie c'est que je ne vois pas trop quel érreure de syntaxe j'aurai pu faire... vue que la ligne dont il parle est mon "done" de fin de while...
help?
voila mon script :
#!/bin/bash
while [ choix = 1 ]
do
frequence=4
#corespondant a 4 semaines
dest='smb://lnx-mail/keriobackup/lenze'
#chemin par défaut
echo '1 lancer la mise a jour avec les derniers parametres'
echo '2 changer l adresse de destination'
echo '3 changer la frequence'
(je devrai implanter plus tard le changement d'adresse de destination avec une variable pour le moment il ne fait rien a part charger une chaine de charactère dans une variable.)
read choix
if $choix = 1
then {
wget -r -k -np -P $smb://lnx-mail/keriobackup/lenze --user-agent=Firefox http://src.lenze.com/lenze-bibliothek/en
wget -r -k -np -P $smb://lnx-mail/keriobackup/lenze --user-agent=Firefox http://src.lenze.com/lenze-bibliothek/fr
wget -r -k -np -P $smb://lnx-mail/keriobackup/lenze --user-agent=Firefox http://src.lenze.com/lenze-bibliothek/de
$ at now +$frequence minutes
}
fi
if $choix = 2
then {
echo 'saisissez l adresse de destination \( exemple \: smb\:\/\/lnx\-mail\/keriobackup\/lenze\)'
read dest
}
fi
if $choix = 3
then {
echo 'saisissez le nombre de semaines entre chaques mises a jour'
read frequence
}
fi
done
je dois faire un petit bash pour automatiser la récupération de documentations sur un site
et il doit s'éffectuer toutes les 4 semaines
j'ai fais une ébauche mais au moment de le tester le terminal me dit qu'il y a une erreur de syntaxe a la ligne 41 et ferme prématurément mon programme
ce qui m'ennuie c'est que je ne vois pas trop quel érreure de syntaxe j'aurai pu faire... vue que la ligne dont il parle est mon "done" de fin de while...
help?
voila mon script :
#!/bin/bash
while [ choix = 1 ]
do
frequence=4
#corespondant a 4 semaines
dest='smb://lnx-mail/keriobackup/lenze'
#chemin par défaut
echo '1 lancer la mise a jour avec les derniers parametres'
echo '2 changer l adresse de destination'
echo '3 changer la frequence'
(je devrai implanter plus tard le changement d'adresse de destination avec une variable pour le moment il ne fait rien a part charger une chaine de charactère dans une variable.)
read choix
if $choix = 1
then {
wget -r -k -np -P $smb://lnx-mail/keriobackup/lenze --user-agent=Firefox http://src.lenze.com/lenze-bibliothek/en
wget -r -k -np -P $smb://lnx-mail/keriobackup/lenze --user-agent=Firefox http://src.lenze.com/lenze-bibliothek/fr
wget -r -k -np -P $smb://lnx-mail/keriobackup/lenze --user-agent=Firefox http://src.lenze.com/lenze-bibliothek/de
$ at now +$frequence minutes
}
fi
if $choix = 2
then {
echo 'saisissez l adresse de destination \( exemple \: smb\:\/\/lnx\-mail\/keriobackup\/lenze\)'
read dest
}
fi
if $choix = 3
then {
echo 'saisissez le nombre de semaines entre chaques mises a jour'
read frequence
}
fi
done
A voir également:
- Probleme de syntaxe dans ma boucle while
- Télé samsung s'éteint et se rallume en boucle - Forum Téléviseurs
- Tv orange chargement en boucle ✓ - Forum TV & Vidéo
- Mise à disposition de boucle locale dédiée ✓ - Forum Freebox
- Xiaomi s'éteint tout seul et se rallume en boucle - Forum Xiaomi
- La syntaxe du nom de fichier de répertoire ou de volume est incorrecte ✓ - Forum Windows 10
3 réponses
#!/bin/bash frequence=4 #corespondant a 4 semaines =>valleurs par défaut dest='smb://lnx-mail/keriobackup/lenze' #chemin par défaut => while true #=>au moins une fois de téléchager do echo echo '1 lancer la mise a jour avec les derniers parametres' echo '2 changer l adresse de destination' echo '3 changer la frequence' read -p "Votre choix : " choix case "${choix}" in 1) echo "wget -r -k -np -P ${dest} --user-agent=Firefox http://src.lenze.com/lenze-bibliothek/en" echo "wget -r -k -np -P ${dest} --user-agent=Firefox http://src.lenze.com/lenze-bibliothek/fr" echo "wget -r -k -np -P ${dest} --user-agent=Firefox http://src.lenze.com/lenze-bibliothek/de" echo "at now +$frequence minutes" #=>relance le programme au bout d'un certain temps echo "bash premiertest.sh" #=> nom du programme break ;; 2) echo 'saisissez l adresse de destination ( exemple : smb://lnx-mail/keriobackup/lenze)' read -p "Nouvelle destination : " dest echo "Nouvelle adresse : ${dest}" continue ;; 3) echo 'saisissez le nombre de semaines entre chaques mises a jour' read -p "Nouvelle fréquence : " frequence echo "Nouvelle fréquence : ${frequence}" continue ;; *) echo "Mauvais choix ! Recommencez s'il vous plaît." continue ;; esac done
Zen my nuggets ;-)
Faites un geste pour l'environnement, fermez vos fenêtres et adoptez un manchot.
Salut,
La syntaxe d'un test est plutôt du genre :
ou
Dans ton cas un "case ... esac" serait peut être plus approprié, non ?
La syntaxe d'un test est plutôt du genre :
if [ "${choix}" -eq 1 ] then ... fi
ou
if [[ ${choix} -eq 1 ]] then ... fi
Dans ton cas un "case ... esac" serait peut être plus approprié, non ?
Tu peux faire avec des "if...then...else...fi", mais alors il faut revoir l'ordre de tes tests et la priorité accordée à chaque item en fonction des choix ;-\
Déjà il te faudrait définir la fréquence et l'adresse avant la boucle, puis tester en 1er si ces deux valeurs doivent être changées et enfin lancer la mise à jour avec les nouvelles valeurs et/ou celles par défaut, non ?
Déjà il te faudrait définir la fréquence et l'adresse avant la boucle, puis tester en 1er si ces deux valeurs doivent être changées et enfin lancer la mise à jour avec les nouvelles valeurs et/ou celles par défaut, non ?
alors cette partie n'est pas encore implantée mais je pensais mettre une variable à la place du chemin de destination dans la commande wget (j'ai pas encore regardé si je pouvais le faire soit dit en passant)
mais je ne vois pas pourquoi changer l'ordre d'exécution des scripts : si l'utilisateur entre 3 il va changer la fréquence puis le script va recommencer au niveau du choix . Si il décide alors de faire la mise a jour la fréquence sera celle qu'il a rentré plus haut...
Je comprends pas ce que t'éssaie de me dire donne moi un expemple s'il te plait
mais je ne vois pas pourquoi changer l'ordre d'exécution des scripts : si l'utilisateur entre 3 il va changer la fréquence puis le script va recommencer au niveau du choix . Si il décide alors de faire la mise a jour la fréquence sera celle qu'il a rentré plus haut...
Je comprends pas ce que t'éssaie de me dire donne moi un expemple s'il te plait
Au final j'ai trouvé d'ou venait le problème, Le fait est que j'ai créer le programme dans le bloc note windows et qu'il gère mal les saut de lignes (d'ou mes erreures de syntaxe).
Il m'a suffit de ré écrire le programme dans un éditeur de texte linux tel que gedit pour que tout se mette a fonctionner sans aucun soucis.
Il m'a suffit de ré écrire le programme dans un éditeur de texte linux tel que gedit pour que tout se mette a fonctionner sans aucun soucis.
case "${choix}" in
1) echo "wget -r -k -np -P $smb://lnx-mail/keriobackup/lenze --user-agent=Firefox http://src.lenze.com/lenze-bibliothek/en"
echo "wget -r -k -np -P $smb://lnx-mail/keriobackup/lenze --user-agent=Firefox http://src.lenze.com/lenze-bibliothek/fr"
echo "wget -r -k -np -P $smb://lnx-mail/keriobackup/lenze --user-agent=Firefox http://src.lenze.com/lenze-bibliothek/de"
echo "at now +$frequence minutes" #=>relance le programme au bout d'un certain temps
echo "bash premiertest.sh" #=> nom du programme
break
;;
2) echo 'saisissez l adresse de destination ( exemple : smb://lnx-mail/keriobackup/lenze)'
read -p "Nouvelle destination : " dest
echo "Nouvelle adresse : ${dest}"
continue
;;
3) echo 'saisissez le nombre de semaines entre chaques mises a jour'
read -p "Nouvelle fréquence : " frequence
echo "Nouvelle fréquence : ${frequence}"
continue
;;
*) echo "Mauvais choix ! Recommencez s'il vous plaît."
continue
;;
Je commence a me demander si j'ai bien la bonne version de linux...
Mais même sans ça chez moi ça marche (bash : GNU bash, version 4.2.10(2)-release (x86_64-mandriva-linux-gnu))