Problème dans un script bash

Résolu
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. Contributeur
    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
    1. Contributeur
      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
      1. 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. Contributeur
          Quel système ?
          Quelle distrib ?

          Que donne la commande :

          ls -l /bin/sh
          0
        2. Contributeur
          C'est étrange que cela fonctionne chez moi...
          0
      2. 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. Contributeur
          Effectivement cela semble venir du shell sh ;-(

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

          shopt -p
          0
      3. 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. Contributeur
          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
      4. 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
        1. 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. Contributeur
            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
        2. 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
          1. 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. 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