[Shell] Declaration variable => syntax error

Résolu/Fermé
dzincou - 3 avril 2009 à 17:01
 dzincou - 4 avril 2009 à 09:54
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
A voir également:

8 réponses

jipicy Messages postés 40842 Date d'inscription jeudi 28 août 2003 Statut Modérateur Dernière intervention 10 août 2020 4 897
3 avril 2009 à 17:09
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
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
jipicy Messages postés 40842 Date d'inscription jeudi 28 août 2003 Statut Modérateur Dernière intervention 10 août 2020 4 897 > dzincou
3 avril 2009 à 17:31
C'est fort possible, d'où ma question plus bas :
Quel shell ?

echo $SHELL

0
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
jipicy Messages postés 40842 Date d'inscription jeudi 28 août 2003 Statut Modérateur Dernière intervention 10 août 2020 4 897
3 avril 2009 à 17:28
Avec quel shell ?

On peut voir le script en entier ?

Y'a quoi dans "$1" ?
0
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
jipicy Messages postés 40842 Date d'inscription jeudi 28 août 2003 Statut Modérateur Dernière intervention 10 août 2020 4 897
3 avril 2009 à 17:42
Essaie de récupérer ton extension comme ça :
[tmpfs]$ echo ${VAR}
mon_fichier.txt

[tmpfs]$ echo ${VAR#*.}
txt

[tmpfs]$
;-))
0

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

Posez votre question
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
jipicy Messages postés 40842 Date d'inscription jeudi 28 août 2003 Statut Modérateur Dernière intervention 10 août 2020 4 897
3 avril 2009 à 18:01
[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
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
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
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