[Shell] Declaration variable => syntax error
Résolu
dzincou
-
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
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 :
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
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:
- [Shell] Declaration variable => syntax error
- Déclaration - Guide
- Classic shell - Télécharger - Personnalisation
- Fan error lenovo - Forum Refroidissement
- Impossible de créer le fichier de travail. vérifiez la variable d'environnement temp ✓ - Forum Word
- Cmos checksum error ✓ - Forum Carte-mère/mémoire
8 réponses
Salut,
Déjà la variable $PATH est une variable réservée, en général pour la modifier on emploi la syntaxe :
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/cheminensuite 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)...
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 :
(que j'utilise pour faire des traitements selon l'extension d'un fichier, suite à la question que j'ai posé hier)
avec le message :
Ca ressemble à la meme erreur ...
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 ...
Avec quel shell ?
On peut voir le script en entier ?
Y'a quoi dans "$1" ?
On peut voir le script en entier ?
Y'a quoi dans "$1" ?
Pour la version du shell :
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.
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.
Essaie de récupérer ton extension comme ça :
[tmpfs]$ echo ${VAR} mon_fichier.txt [tmpfs]$ echo ${VAR#*.} txt [tmpfs]$;-))
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 !
Ceci dit, je ne comprend rien à ce bout de code ...
Que représente [tmpfs], les crochets, VAR, #, *, . [xx]$ ???
Merci d'avance !
[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") :
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]$;-))
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 :
Mais ce script :
test.sh :
provoque :
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.
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.
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 :
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.
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 !!
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 !!
En faisant
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 ?
Quel shell ?
echo $SHELL