pb nom de variable - Shell/Batch - Programmation
Marsh Posté le 18-08-2005 à 19:01:02
euh j'y connais pas grand chose la dedans mais pour te permettre d'avoir une reponse (pas forcement mais ca peut aider) je te conseillerais de mettre tout le code.Parce que la on ne voit rien de la declaration de ta variable, etc...
Marsh Posté le 19-08-2005 à 10:15:16
donc c'est pour du linux et je pense que le shell c est du ksh... mais quand je declare en entete ca me fait une couille
bon en fait ca doit virer tous les fichiers d'une arborescence et y en a 4 identiques avec à chaque fois encore un choix pour 2 autres arborences à l'interieur... les * c est normal, y a du texte à la place mais j'ai pas trop le droit de le mettre...
et donc mon problème c est que reponse1 et reponse2 ne sont pas reconnus comme des noms de variable...
merci de votre aide
Code :
|
Marsh Posté le 19-08-2005 à 18:34:32
L'erreur que tu as n'a rien a voir avec ce dont tu parles... Enleve les "$" aux lignes 14 16 18 et 20.
Marsh Posté le 22-08-2005 à 11:09:22
ouais mais non....
voila l'erreur:
Quel est le repertoire a nettoyer?
Pour ***instance0, taper 0
Pour ***instance1, taper 1
Pour ***instance2, taper 2
Pour ***instance3, taper 3
choix:
: invalid variable nameeponse1
Pour nettoyer /***_dev/custom , taper 1
Pour nettoyer /e3f_dev/WEB_INT/classes/com/**** , taper 2
choix:
: invalid variable namereponse2
' unexpected line 12: syntax error at line 13: `in
Marsh Posté le 22-08-2005 à 11:24:37
Je devine que le problème n'est pas visible dans le code que tu nous montres.
Les messages "invalid ... et unexpected" font penser que le problème se situe juste avant le "read".
Il est possible que l'une des lignes "echo" précédentes contient un guillement en trop ou manquant. Il est possible que reponse1 soit une variable déjà définie avant et ne concerne pas une chaine de caractère.
Il faut isoler le problème en se faisant des petits exemples plus simples.
Marsh Posté le 22-08-2005 à 14:36:49
alors la le plus enigmatique;c est que en virant tout le blabla des lignes 1 à 7 et en mettant à la place:
Code :
|
ca fait toujours la meme erreur...
Marsh Posté le 22-08-2005 à 17:09:09
Bon, camarade si tu veux de l'aidre, commence par recopier tes scripts et messages d'erreurs un peu mieux qu'approximativement. Entre tes differents posts rien ne correspond. Et dans ton dernier post, c'est quoi ce "1" qui traine apres un espace ?
Marsh Posté le 22-08-2005 à 17:15:12
matafan a écrit : Bon, camarade si tu veux de l'aidre, commence par recopier tes scripts et messages d'erreurs un peu mieux qu'approximativement. Entre tes differents posts rien ne correspond. Et dans ton dernier post, c'est quoi ce "1" qui traine apres un espace ? |
Par ailleurs
Citation : je pense que le shell c est du ksh... mais quand je declare en entete ca me fait une couille |
En quoi déclarer le shell en entête ne fonctionne pas ?
Et quel est exactement le shell que tu utilises ?
Marsh Posté le 22-08-2005 à 17:24:18
Code :
|
Corrige déjà au moins ceci.
Marsh Posté le 22-08-2005 à 17:39:38
Merci pour votre aide. Donc en déclarant mon shelle en entête j'obtiens l'erreur suivante:
e3fdev03:5.3@algo05>./nettoyeur
-ksh: ./nettoyeur: not found
et voici mon code tel quel:
Code :
|
Marsh Posté le 22-08-2005 à 17:51:04
Tu es sur que les 13 premieres lignes sont en commentaire dans ton script ? Ensuite dans ton premier case, il ne faut pas d'espace apres "path=". Encore une fois, poste to code exact, et le message d'erreur exact.
Marsh Posté le 22-08-2005 à 18:23:00
le message d erreur est exact, il est vrai que le debut n a rien à faire en commentaire
Marsh Posté le 22-08-2005 à 18:49:17
1) vérifie les droits du script
2) pas d'espace quand tu affectes : PATH=blablabla
3) protège tes variables quand tu les lis : "$VAR" et pas $VAR
Marsh Posté le 23-08-2005 à 23:44:57
Vérifie : #! /bin/sh -> #!/bin/sh
Exécution : sh nettoyeur
Sinon chmod +x nettoyeur
Et après tu tapes juste : nettoyeur pour le lancer.
Les variables: $reponse1 -> ${reponse1}
Regarde ça : http://www.shellunix.com/sh.html
Marsh Posté le 24-08-2005 à 09:17:23
IsBack a écrit : Vérifie : #! /bin/sh -> #!/bin/sh |
Pour l'espace il a juste recopié ce que j'ai mis, c'est plus portable en fait :
http://www.gnu.org/software/autoco [...] nf_10.html
<<
[...] include a space after the exclamation point in interpreter specifications, like this:
#! /usr/bin/perl
If you omit the space before the path, then 4.2BSD based systems (such as DYNIX) will ignore the line, because they interpret `#! /' as a 4-byte magic number. Some old systems have quite small limits on the length of the `#!' line too, for instance 32 bytes (not including the newline) on SunOS 4.
>>
Marsh Posté le 24-08-2005 à 15:38:14
ok, je connaissait pas.
Par contre j'ai pas l'impression que ça marche sur toutes les machines.
je suis en SunOs 5.8 et ça marche pas.
Marsh Posté le 24-08-2005 à 17:29:43
Si, ca marche sur tous les unix. Evidemment si "." n'est pas dans ton PATH il faut faire "./nettoyeur" et pas seulement "nettoyeur".
Marsh Posté le 24-08-2005 à 20:08:12
"." dans le path c'est pas très secure (à vérifier)
"l'en-tête" s'appelle une ligne de shebang (shebang line)
Marsh Posté le 25-08-2005 à 09:47:36
merci... j'avais mis les droits en execution sur le fichier, mais je vais reverifier la... voila voila, si j'ai un problème je vous bippe! ;-)
Marsh Posté le 18-08-2005 à 17:52:23
bon alors voila, je comprends pas du tout ce qu'il se passe...
je fais un ptit menu pour mon batch avec des echo qui vont bien...
et lorsque je veux recuperer le choix dans une variable avec un read, ca coince:
la console me mets "invalid variable name"...
donc je fais:
et ca coince
merci de votre aide