[Shell] Declaration variable => syntax error
Résolu/Fermé
A voir également:
- [Shell] Declaration variable => syntax error
- Classic shell windows 11 - Télécharger - Personnalisation
- Eespt technical error ✓ - Forum TNT / Satellite / Réception
- Vba range avec variable ✓ - Forum VB / VBA
- Shell pause ✓ - Forum Shell
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
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 :
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 ...
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
3 avril 2009 à 17:28
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.
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
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]$;-))
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 !
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
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") :
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 !!
3 avril 2009 à 17:30
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 ?
3 avril 2009 à 17:31
Quel shell ?
echo $SHELL