Problème dans un script bash

Résolu/Fermé
axolotus Messages postés 7 Date d'inscription dimanche 24 juillet 2011 Statut Membre Dernière intervention 25 juillet 2011 - 24 juil. 2011 à 20:43
 gm - 26 juil. 2011 à 08:15
Bonjour,

je suis entrain de créer des scripts de sauvegarde et dans ce cadre je découvre le langage bash
voici mon code
#!/bin/sh
#Declaration des variables
KWARTZ_LOCALE=/mnt/essai/
rm -rf "$KWARTZ_LOCALE"*

L'exécution de ce script devrait vider le contenu du dossier /mnt/essai mais rien ne se passe.
Alors que lorsque j'écris dans le script directement
rm -rf /mnt/essai/*
il exécute sans problème.
Ma question est donc la suivante comment utiliser la fonction rm avec une variable?????

Si quelqu'un a une idée, je suis preneur :)
Merci d'avance

9 réponses

Franzux Messages postés 8903 Date d'inscription mercredi 5 décembre 2007 Statut Contributeur Dernière intervention 27 octobre 2015 1 145
Modifié par Franzux le 24/07/2011 à 23:10
Vire les quotes :

franz@maerix:~/test$ mkdir test1 
franz@maerix:~/test$ cd test1/ 
franz@maerix:~/test/test1$ touch {1,2,3,4} 
franz@maerix:~/test/test1$ cd .. 
franz@maerix:~/test$ variable=/home/franz/test/test1/ 
franz@maerix:~/test$ echo $variable  
/home/franz/test/test1/ 
franz@maerix:~/test$ ls test1/ 
1  2  3  4 
franz@maerix:~/test$ rm -r -f $locale* 
franz@maerix:~/test$ ls test1/ 
franz@maerix:~/test$  

Intel Q6600 Debian Lenny//Gentoo
Sous Linux, 99% des bugs se situent entre le clavier et la chaise de bureau...
0
zipe31 Messages postés 36317 Date d'inscription dimanche 7 novembre 2010 Statut Contributeur Dernière intervention 27 janvier 2021 6 559
24 juil. 2011 à 23:14
Salut,

Bizarre ;-\

Rajoute ce qui est en gras dans ton script et exécutes-le, puis affiches-nous le résultat :

#!/bin/sh
set -xv
#Declaration des variables
KWARTZ_LOCALE=/mnt/essai/
rm -rvf "$KWARTZ_LOCALE"* 
0
axolotus Messages postés 7 Date d'inscription dimanche 24 juillet 2011 Statut Membre Dernière intervention 25 juillet 2011
24 juil. 2011 à 23:26
sans les quotes ça donne rien n'ont plus.

j'ai modifié le script comme tu me l'a suggéré voici la reponse :
/mnt # : invalid optionurgekwartz.sh: line 2: set: -
/mnt # set: usage: set [--abefhkmnptuvxBCHP] [-o option] [arg ...]
-sh: set:: command not found

et merci pour votre aide
0
zipe31 Messages postés 36317 Date d'inscription dimanche 7 novembre 2010 Statut Contributeur Dernière intervention 27 janvier 2021 6 559
24 juil. 2011 à 23:29
Quel système ?
Quelle distrib ?

Que donne la commande :

ls -l /bin/sh
0
Franzux Messages postés 8903 Date d'inscription mercredi 5 décembre 2007 Statut Contributeur Dernière intervention 27 octobre 2015 1 145
24 juil. 2011 à 23:53
C'est étrange que cela fonctionne chez moi...
0
axolotus Messages postés 7 Date d'inscription dimanche 24 juillet 2011 Statut Membre Dernière intervention 25 juillet 2011
24 juil. 2011 à 23:57
Voila ce que donne ls -l /bin/sh
-rwxr-xr-x 1 admin administ 648420 May 19 23:03 /bin/sh*

Je suis sur un nas qnap et visiblement c'est un linux maison

J'ai exécuté le script sur une suse et oh miracle il fonctionne.
Cela doit donc venir du qnap ...
0
zipe31 Messages postés 36317 Date d'inscription dimanche 7 novembre 2010 Statut Contributeur Dernière intervention 27 janvier 2021 6 559
25 juil. 2011 à 09:24
Effectivement cela semble venir du shell sh ;-(

Essaie voir cette commande et affiches-nous le résultat si elle marche :

shopt -p
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
axolotus Messages postés 7 Date d'inscription dimanche 24 juillet 2011 Statut Membre Dernière intervention 25 juillet 2011
25 juil. 2011 à 11:30
shopt -u cdable_vars
shopt -u cdspell
shopt -u checkhash
shopt -u checkwinsize
shopt -s cmdhist
shopt -u dotglob
shopt -u execfail
shopt -s expand_aliases
shopt -u extdebug
shopt -u extglob
shopt -s extquote
shopt -u failglob
shopt -s force_fignore
shopt -u gnu_errfmt
shopt -u histappend
shopt -u histreedit
shopt -u histverify
shopt -s hostcomplete
shopt -u huponexit
shopt -s interactive_comments
shopt -u lithist
shopt -s login_shell
shopt -u mailwarn
shopt -u no_empty_cmd_completion
shopt -u nocaseglob
shopt -u nocasematch
shopt -u nullglob
shopt -s progcomp
shopt -s promptvars
shopt -u restricted_shell
shopt -u shift_verbose
shopt -s sourcepath
shopt -u xpg_echo
0
zipe31 Messages postés 36317 Date d'inscription dimanche 7 novembre 2010 Statut Contributeur Dernière intervention 27 janvier 2021 6 559
25 juil. 2011 à 11:43
shopt -u extglob
;-((

Forcément l'expansion des noms de fichiers est désactivé ;-(
Mais ce n'est pas sûr que ce soit la cause.

A tout hasard, rajoute cette ligne en début de script :

shopt -s extglob
0
axolotus Messages postés 7 Date d'inscription dimanche 24 juillet 2011 Statut Membre Dernière intervention 25 juillet 2011
25 juil. 2011 à 11:40
Excuse moi j'ai lancé le sujet par erreur. Je t'ai mis le résultat du shopt -u

et merci pour ton aide
0
axolotus Messages postés 7 Date d'inscription dimanche 24 juillet 2011 Statut Membre Dernière intervention 25 juillet 2011
25 juil. 2011 à 13:30
avec shopt -s extglob
ça marche pas non plus :(

d'autre part en appliquant le debugger :
sh -x /share/scripts/purgekwartz.sh

j'ai ce retour :
KWARTZ_LOCALE=$'/mnt/essai/\r'
' rm -rf '/mnt/essai/

est-ce normal ce \r à la fin de KWARTZ_LOCALE ?????
0
zipe31 Messages postés 36317 Date d'inscription dimanche 7 novembre 2010 Statut Contributeur Dernière intervention 27 janvier 2021 6 559
25 juil. 2011 à 14:03
est-ce normal ce \r à la fin de KWARTZ_LOCALE ?????
Euh... non ;-\

Tu peux afficher la sortie de :

cat -A /share/scripts/purgekwartz.sh 

Et si l'option "-A" de cat n'est pas reconnue, essaye avec :
sed -n l /share/scripts/purgekwartz.sh 
0
Ca donne l'impression d'avoir écrit le script sous Windows puis poussé ça en brut de fonderie sur ta machine...
Essaie d'utiliser des guillemets :
KWARTZ_LOCALE="/mnt/essai/"
0
axolotus Messages postés 7 Date d'inscription dimanche 24 juillet 2011 Statut Membre Dernière intervention 25 juillet 2011
25 juil. 2011 à 23:11
Ta remarque gm m'a mis la puce à l'oreille. Bien que j'utilise uniquement vi le script de base était un .cmd d'un collègue que j'avais récupéré. Il ne fonctionnaient pas. J'ai donc converti le fichier en .sh sans plus de résultats et pour cause le fichier avait vraisemblablement rédiger sur un windows...
J'ai fait une recherche sur les format des fichiers depuis vi et je suis tombé sur ce site en anglais mais très intéréssant : https://vim.fandom.com/wiki/File_format

dans vi en tapant :set ff? (ff = file format) le réponse était fileformat=dos
J'ai donc tapé :
:update Save any changes.
:e ++ff=dos Edit file again, using dos file format ('fileformats' is ignored).[A 1]
:w Write buffer using dos (CRLF) line endings.

et j'ai a nouveau véfifier le format
set ff?
fileformat=unix

et je l'ai exécuté et la miracle ça fonctionne :)

Je vous remercie tous de m'avoir apporté vos idées sans vous je n'aurai jamais trouvé ce coup tordu. C'est toujours la galère de reprendre le travail d'un autre...
MERCI A TOUS

au fait quelqu'un connait la différence entre .cmd et .sh?
0
On se fait toujours avoir d'une manière ou d'une autre avec ça.
Le coup le plus tordu que j'ai eu, c'est un truc du style "Not found : /bin/bash" alors qu'il était bien là et exécutable.
Ca venait d'un \r à la fin du shebang...
0