Problème dans un script bash

Résolu
axolotus Messages postés 8 Statut Membre -  
 gm -
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

  1. Franzux Messages postés 9705 Statut Contributeur 1 146
     
    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
  2. zipe31 Messages postés 34620 Date d'inscription   Statut Contributeur Dernière intervention   6 501
     
    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
  3. axolotus Messages postés 8 Statut Membre
     
    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
    1. zipe31 Messages postés 34620 Date d'inscription   Statut Contributeur Dernière intervention   6 501
       
      Quel système ?
      Quelle distrib ?

      Que donne la commande :

      ls -l /bin/sh
      0
    2. Franzux Messages postés 9705 Statut Contributeur 1 146
       
      C'est étrange que cela fonctionne chez moi...
      0
  4. axolotus Messages postés 8 Statut Membre
     
    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
    1. zipe31 Messages postés 34620 Date d'inscription   Statut Contributeur Dernière intervention   6 501
       
      Effectivement cela semble venir du shell sh ;-(

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

      shopt -p
      0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. axolotus Messages postés 8 Statut Membre
     
    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
    1. zipe31 Messages postés 34620 Date d'inscription   Statut Contributeur Dernière intervention   6 501
       
      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
  7. axolotus Messages postés 8 Statut Membre
     
    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
  8. axolotus Messages postés 8 Statut Membre
     
    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
    1. zipe31 Messages postés 34620 Date d'inscription   Statut Contributeur Dernière intervention   6 501
       
      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
  9. gm
     
    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
  10. axolotus Messages postés 8 Statut Membre
     
    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
    1. gm
       
      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