[Shell] Declaration variable => syntax error

Résolu
dzincou -  
 dzincou -
Bonjour,
Je ne suis pas encore trés à l'aise avec les scripts shell, mais là je ne comprend pas ...

au debut de mon fichier j'ai défini un chemin de cette maniere

PATH=$(echo "/mon/path/")


Peut être pas la meilleure manière, je n'en sais rien, mais jusque là ca fonctionnait très bien.

Je passe sur une autre machine... Je lance le même programme et j'obtiens l'erreur suivante :

./prog.sh: syntax error at line 6: `PATH=$' unexpected


Ca vient de la machine à mon avis, mais je ne sais pas pourquoi, ni quel élément de configuration de la machine pourrait engendrer cela. Et je ne sais pas comment excecuter mon script du coup, d'autant plus que la configuration de cette machine ne devrait pas être ammenée à changer ... ?

Si vous avez une explication, ou une aide à m'apporter je vous en remercie par avance.

Si vous avez besoin d'une information particuliere supplémentaire n'hesitez pas.

Eric
Configuration: Windows XP
Firefox 1.5.0.2

8 réponses

  1. jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention   4 898
     
    Salut,

    Déjà la variable $PATH est une variable réservée, en général pour la modifier on emploi la syntaxe :
    PATH=$PATH:/nouveau/chemin
    ensuite la déclaration d'un chemin dans une variable ce fait en général par :
    CHEMIN="/chemin/repertoire/dossier/"
    la syntaxe :
    VAR=$(commande)
    est employée pour récupérer le résultat d'une commande dans une variable, et non un chemin (à moins que le chemin soit le résultat attendu d'une commande)...
    1
    1. dzincou
       
      Re-Bonjour,

      En faisant

      uname -a 


      sur les 2 machines, je me rends compte que la premiere ou tout se passe bien est "Linux" alors que la seconde est "SunOS"

      Est-ce l'origine de la difference à l'excecution que j'obtiens ?
      0
      1. jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention   4 898 > dzincou
         
        C'est fort possible, d'où ma question plus bas :
        Quel shell ?

        echo $SHELL

        0
  2. dzincou
     
    Merci,
    J'ai modifié la maniere de déclarer les chemins. Pour info j'avais mis PATH de maniere informelle, dans mon script le chemin ne porte pas ce nom, je n'avais pas pensé que ca pouvait preter à confusion dans ce message :-)

    Bon, le script avance un peu plus loin, mais rebloque lorsque je fais :

    ext=$(echo $1 | cut -f2 -d '.')


    (que j'utilise pour faire des traitements selon l'extension d'un fichier, suite à la question que j'ai posé hier)

    avec le message :

    ./monProg.sh: syntax error at line 74: `ext=$' unexpected


    Ca ressemble à la meme erreur ...
    0
  3. jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention   4 898
     
    Avec quel shell ?

    On peut voir le script en entier ?

    Y'a quoi dans "$1" ?
    0
    1. dzincou
       
      Pour la version du shell :

      bash-2.05$ echo $SHELL
      /appl/bash/bin/bash
      bash-2.05$ bash -version
      GNU bash, version 2.05.0(1)-release (sparc-sun-solaris2.8)
      Copyright 2000 Free Software Foundation, Inc.
      


      Le script est un peu long, mais sinon, $1 est le parametre de la fonction qui contient cette ligne ou ca bloque, c'est un nom de fichier quelconque.
      0
  4. jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention   4 898
     
    Essaie de récupérer ton extension comme ça :
    [tmpfs]$ echo ${VAR}
    mon_fichier.txt
    
    [tmpfs]$ echo ${VAR#*.}
    txt
    
    [tmpfs]$
    ;-))
    0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. dzincou
     
    Merci beaucoup, je suis en train d'essayer.
    Ceci dit, je ne comprend rien à ce bout de code ...
    Que représente [tmpfs], les crochets, VAR, #, *, . [xx]$ ???

    Merci d'avance !
    0
  7. jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention   4 898
     
    [tmpfs] c'est un répertoire temporaire où je teste tous les trucs... rien de plus ;-))

    Après la syntaxe "${var}" avec des accolades est la syntaxe préconisée pour parer à d'éventuelles erreurs lors de la concaténation de variables par exemple, c'est juste une habitude à prendre.

    Par contre c'est nécessaire pour le remplacement de paramètres (voir man bash "Remplacement de paramètres") :
    [tmpfs]$ echo ${VAR}
    mon.autre_fichier.txt
    
    [tmpfs]$ echo ${VAR#*.}
    autre_fichier.txt
    
    [tmpfs]$ echo ${VAR##*.}
    txt
    
    [tmpfs]$ echo ${VAR%.*}
    mon.autre_fichier
    
    [tmpfs]$ echo ${VAR%%.*}
    mon
    
    [tmpfs]$ 
    ;-))
    0
    1. dzincou
       
      Bonjour,

      Pour faire suite à la discussion d'hier j'ai toujours le même problème et voilà ce qui se passe :

      ceci devrait fonctionner, la preuve :

      bash-2.05$ toto="test.html.bak"
      bash-2.05$ echo $toto
      test.html.bak
      bash-2.05$ tutu=$(echo ${toto##*.})
      bash-2.05$ echo $tutu
      bak
      


      Mais ce script :
      test.sh :
      #!/bin/sh
      
      toto="test.html.bak"
      echo $toto
      tutu=$(echo ${toto##*.})
      echo $tutu
      


      provoque :

      bash-2.05$ ./test.sh
      test.html.bak
      ./test.sh: syntax error at line 5: `tutu=$' unexpected
      



      Voilà qui me ramène au point de départ :-(
      Pour rappel, cela se déroule sous sunOS ... y'a t'il une astuce quelconque pour que cela fonctionne ?

      Merci,

      E.
      0
  8. dzincou
     
    Merci j'ai compris ;-) !!!

    Par contre je n'aurai pas deviné seul ...

    Pour info, si je rencontre d'autres problèmes sur mon script, comment puis je trouver une aide ? Avec google je n'ai pas trouvé grand chose en tapant "shell sunOS" à part des personnes qui comme moi ont eu un soucis en passant leur script sous sun ...

    Pour la suite du programme, je croise les doigts le temps que j'adapte déjà ce bout sur les extensions !

    Car la signification de #*. pour l'extension je la comprend après coup, mais même en la voyant maintenant je ne trouve pas de doc m'expliquant ce que veulent dire le # et l'* ...

    Surtout que sur ma machine :

    bash-2.05$ man bash
    No manual entry for bash.
    
    0
  9. dzincou
     
    J'ai fini par trouver ce qui n'allait pas ...

    Désolé pour tout ces dérrangements :-)

    En fait, la bonne version du bash à utiliser ne se trouvait pas sous /bin/bash ... mais dans un autre répertoire ... En fouillant un peu j'en ai trouvé un autre et bizarrement tout fonctionne maintenant.

    Merci pour votre aide, cela m'a tout de même permis de comprendre un certain nombre de chose !!
    0