pb nom de variable

pb nom de variable - Shell/Batch - Programmation

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:
 

Code :
  1. echo "Mon menu blabla"
  2. read reponse


 
et ca coince
 
merci de votre aide

Reply

Marsh Posté le 18-08-2005 à 17:52:23   

Reply

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...
 

Reply

Marsh Posté le 18-08-2005 à 21:24:07    

et pour quel OS aussi.

Reply

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 :
  1. echo "Quel est le repertoire a nettoyer?"
  2. echo "Pour ***instance0, taper 0"
  3. echo "Pour ***instance1, taper 1"
  4. echo "Pour ***instance2, taper 2"
  5. echo "Pour ***instance3, taper 3"
  6. echo "choix:"
  7. read reponse1
  8. echo  ""
  9. echo "  Pour nettoyer  /***_dev/custom ,    taper 1"
  10. echo "  Pour nettoyer  /***_dev/WEB_INT/classes/com/*** , taper 2"
  11. echo "choix:"
  12. read reponse2
  13. case $reponse1 in
  14.   0)$path= /5.3/***instance0
  15.      ;;
  16.   1)$path= /5.3/***instance1
  17.       ;;
  18.   2)$path= /5.3/***instance2
  19.       ;;
  20.   3)$path= /5.3/***instance3
  21.       ;;
  22.   *)echo Erreur dans le choix du répertoire a nettoyer
  23.    exit 1
  24.    ;;
  25. esac
  26. case $reponse2 in
  27.   1)path=$path/webapps/***_dev/custom  
  28.     rm -rf $path
  29. mkdir classic/menubar
  30. mkdir config/classic/menubar
  31. mkdir config/fax
  32. mkdir config/main
  33. mkdir config/statusbar
  34. mkdir config/system/login
  35. mkdir config/titlebar
  36. mkdir config/wdk
  37. mkdir config/webcomponent/actions
  38. mkdir config/webcomponent/library
  39. mkdir fax
  40. mkdir statusbar
  41. mkdir strings
  42. mkdir system/login
  43. mkdir theme/coolblue/css
  44. mkdir theme/coolblue/icons
  45. mkdir theme/coolblue/images
  46. mkdir theme/docublue/css
  47. mkdir theme/docublue/icons
  48. mkdir theme/docublue/images
  49. mkdir theme/documentum/css
  50. mkdir theme/documentum/icons
  51. mkdir theme/documentum/images
  52. mkdir theme/high contrast/css
  53. mkdir theme/high contrast/icons
  54. mkdir theme/high contrats/images
  55. mkdir theme/kaleidoscope/css
  56. mkdir theme/kaleidoscope/icons
  57. mkdir theme/kaleidoscope/images
  58. mkdir theme/mellow/css
  59. mkdir theme/mellow/icons
  60. mkdir theme/mellow/images
  61. mkdir theme/shiny/css
  62. mkdir theme/shiny/icons
  63. mkdir theme/shiny/images
  64. mkdir theme/trendy/css
  65. mkdir theme/trendy/icons
  66. mkdir theme/trendy/images
  67. mkdir titlebar
  68. mkdir wdk/system/setprivatekey
  69. mkdir webcomponent/library/create
  70. mkdir webcomponent/library/permissions
  71. mkdir webcomponent/library/properties
  72.    ;;
  73.   2)path=$path/webapps/WEB_INF/classes/com/****  
  74.    rm -rf $path
  75. mkdir e3f/cnst
  76. mkdir e3f/custom/fax
  77. mkdir e3f/custom/system/login
  78. mkdir e3f/custom/titlebar
  79. mkdir e3f/custom/util
  80. mkdir e3f/fax/cover
  81. mkdir e3f/model/user
  82. mkdir sgib_util/commo/logger
  83. mkdir sgib_util/daemon/common
  84. mkdir sgib_util/dctm/task
  85. mkdir sgib_util/generatedoc/dctm
  86. mkdir sgib_util/generatedoc/element/dctm
  87. mkdir sgib_util/mergedoc
  88. mkdir sgib_util/timer
  89. mkdir sgib_util/wdk/util
  90.    ;;
  91.   *)echo Erreur dans le choix du répertoire a nettoyer
  92.    exit 1
  93.    ;;
  94. esac
  95. exit 0

Reply

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.

Reply

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

Reply

Marsh Posté le 22-08-2005 à 11:09:44    

dois-je dire que ca me laisse perplexe quand même...

Reply

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.

Reply

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 :
  1. echo choix
  2. read reponse 1


 
ca fait toujours la meme erreur...


Message édité par crement le 22-08-2005 à 14:40:14
Reply

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 ?

Reply

Marsh Posté le 22-08-2005 à 17:09:09   

Reply

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 ?

Reply

Marsh Posté le 22-08-2005 à 17:24:18    

Code :
  1. #! /bin/sh
  2. echo "Quel est le repertoire a nettoyer?"
  3. echo "Pour ***instance0, taper 0"
  4. echo "Pour ***instance1, taper 1"
  5. echo "Pour ***instance2, taper 2"
  6. echo "Pour ***instance3, taper 3"
  7. echo "choix:"
  8. read reponse1
  9. echo ""
  10. echo "        Pour nettoyer  /***_dev/custom ,             taper 1"
  11. echo "        Pour nettoyer  /***_dev/WEB_INT/classes/com/*** ,    taper 2"
  12. echo "choix:"
  13. read reponse2
  14. case "$reponse1" in
  15.   0)
  16.      path="/5.3/***instance0"
  17.      ;;
  18. ...
  19. esac
  20. ...


 
Corrige déjà au moins ceci.


---------------
Il y a autant d'atomes d'oxygène dans une molécule d'eau que d'étoiles dans le système solaire.
Reply

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 :
  1. #! /bin/sh
  2. # echo "Quel est le repertoire a nettoyer?"
  3. # echo "Pour e3finstance0, taper 0"
  4. # echo "Pour e3finstance1, taper 1"
  5. # echo "Pour e3finstance2, taper 2"
  6. # echo "Pour e3finstance3, taper 3"
  7. # echo "choix:"
  8. # read reponse1
  9. # echo     ""
  10. # echo "        Pour nettoyer  /e3f_dev/custom ,             taper 1"
  11. # echo "        Pour nettoyer  /e3f_dev/WEB_INT/classes/com/sgib ,    taper 2"
  12. # echo "choix:"
  13. # read reponse2
  14. case $reponse1 in
  15.   0)path= /5.3/e3finstance0
  16.      ;;
  17.   1)path= /5.3/e3finstance1
  18.       ;;
  19.   2)path= /5.3/e3finstance2
  20.       ;;
  21.   3)path= /5.3/e3finstance3
  22.       ;;
  23.   *)echo Erreur dans le choix du répertoire a nettoyer
  24.    exit 1
  25.    ;;
  26. esac
  27. case $reponse2 in
  28.   1)path=$path/webapps/e3f_dev/custom
  29.     rm -rf $path
  30. mkdir classic/menubar
  31. mkdir config/classic/menubar
  32. mkdir config/fax
  33. mkdir config/main
  34. mkdir config/statusbar
  35. mkdir config/system/login
  36. mkdir config/titlebar
  37. mkdir config/wdk
  38. mkdir config/webcomponent/actions
  39. mkdir config/webcomponent/library
  40. mkdir fax
  41. mkdir statusbar
  42. mkdir strings
  43. mkdir system/login
  44. mkdir theme/coolblue/css
  45. mkdir theme/coolblue/icons
  46. mkdir theme/coolblue/images
  47. mkdir theme/docublue/css
  48. mkdir theme/docublue/icons
  49. mkdir theme/docublue/images
  50. mkdir theme/documentum/css
  51. mkdir theme/documentum/icons
  52. mkdir theme/documentum/images
  53. mkdir theme/high contrast/css
  54. mkdir theme/high contrast/icons
  55. mkdir theme/high contrats/images
  56. mkdir theme/kaleidoscope/css
  57. mkdir theme/kaleidoscope/icons
  58. mkdir theme/kaleidoscope/images
  59. mkdir theme/mellow/css
  60. mkdir theme/mellow/icons
  61. mkdir theme/mellow/images
  62. mkdir theme/shiny/css
  63. mkdir theme/shiny/icons
  64. mkdir theme/shiny/images
  65. mkdir theme/trendy/css
  66. mkdir theme/trendy/icons
  67. mkdir theme/trendy/images
  68. mkdir titlebar
  69. mkdir wdk/system/setprivatekey
  70. mkdir webcomponent/library/create
  71. mkdir webcomponent/library/permissions
  72. mkdir webcomponent/library/properties
  73.    ;;
  74.   2)path=$path/webapps/WEB_INF/classes/com/sgib
  75.    rm -rf $path
  76. mkdir e3f/cnst
  77. mkdir e3f/custom/fax
  78. mkdir e3f/custom/system/login
  79. mkdir e3f/custom/titlebar
  80. mkdir e3f/custom/util
  81. mkdir e3f/fax/cover
  82. mkdir e3f/model/user
  83. mkdir sgib_util/commo/logger
  84. mkdir sgib_util/daemon/common
  85. mkdir sgib_util/dctm/task
  86. mkdir sgib_util/generatedoc/dctm
  87. mkdir sgib_util/generatedoc/element/dctm
  88. mkdir sgib_util/mergedoc
  89. mkdir sgib_util/timer
  90. mkdir sgib_util/wdk/util
  91.    ;;
  92.   *)echo Erreur dans le choix du répertoire a nettoyer
  93.    exit 1
  94.    ;;
  95. esac
  96. exit 0


 

Reply

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.

Reply

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

Reply

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


---------------
Il y a autant d'atomes d'oxygène dans une molécule d'eau que d'étoiles dans le système solaire.
Reply

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

Reply

Marsh Posté le 24-08-2005 à 09:17:23    

IsBack a écrit :

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


 
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.  
>>


---------------
Il y a autant d'atomes d'oxygène dans une molécule d'eau que d'étoiles dans le système solaire.
Reply

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.

Reply

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".

Reply

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)

Reply

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! ;-)

Reply

Marsh Posté le    

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed