2017-01-31 1 views
0

Bonjour,Comment assigner des variables dans un script csh et les utiliser comme arguments pour ce même script?

En espérant l'aide de toute personne ici, merci d'avance. Je T.csh qui ressemble à ceci:

#! /bin/csh 

set a="01 02 03 04 05 06 07 08 09 10 11 12 13" 
set b="14 15 16 17 18 19 20 21 22 23 24 25" 
set c="01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25" 

set X = `grep $1 EOL.txt | head -n1 | cut -d- -f1` 
printf "$X\n$2\n$3\nYYYY\n1\nN\n" 

Les variables a, b et c sont éventuellement utilisés comme 3ème argument dans la ligne de printf. Le problème est, chaque fois que j'essaie d'exécuter le script, il a montré une variable indéfinie. Ces lignes de commande définies fonctionnent chaque fois que je les ai assignées de manière interactive, mais dans le script, cela semble ne pas fonctionner. Peut-être que j'ai besoin de l'initialiser mais je n'ai pas compris comment. Juste nouveau à cette chose de programmation, j'espère que quelqu'un ici peut m'aider. Merci beaucoup d'avance.

Voici l'exécution de l'échantillon et erreur pour votre référence:

CAT-46{bc2}40>set a="01 02 03 04 05 06 07 08 09 10 11 12 13" 
CAT-46{bc2}41>./T.csh 4773 XXXX.XX "$a" 
62 
XXXX.XX 
01 02 03 04 05 06 07 08 09 10 11 12 13 
82869 
1 
N 
CAT-46{bc2}42>unset a 
CAT-46{bc2}43>./T.csh 4773 XXXX.XX "$a" 
a: Undefined variable 
CAT-46{bc2}44> 

Si i définir les variables manuellement, il est OK, mais quand j'ai appelé pour lui à partir du script, la signalisation d'erreur variable non définie.

Mike

+1

Collez l'erreur exacte que vous voyez dans votre question. – codeforester

+0

ET affichez une utilisation incluant $ a, $ b, $ c. Basé sur un autre Q hier pour csh, je crois que csh étouffe sur les espaces dans les valeurs pour les affectations de variables. (même quand ils sont cités). Donc, assurez-vous que vous pouvez faire une utilisation simple de l'une de ces vars (avec des espaces en eux) avant de passer beaucoup de temps à ce sujet. Voir http://grymoire.com/unix/csh.html pour un tutoriel csh et une discussion sur les raisons pour lesquelles vous voudrez probablement utiliser 'bash' si vous le pouvez. Bonne chance. – shellter

Répondre

0
prompt> unset a 
prompt> ./T.csh 4773 XXXX.XX "$a" 

La première commande, "unset a", supprime la variable. Dans la deuxième commande, vous essayez de lire la variable (sur la ligne de commande!). C'est pourquoi csh se plaint.

+0

hi @ linuxfan, je viens de montrer sur cet exemple que la commande set fonctionne sur mon shell. A l'intérieur de T.csh, j'ai également déclaré la même commande set, donc je m'attendais à ce que je l'appelle aussi quand je l'exécute mais ce n'est pas le cas. – Mike

+0

Non. L'ensemble ** fonctionne ** dans T.csh (à condition que csh soit vraiment dans/bin - êtes-vous sûr?). Mais si vous, interactivement, faites "unset a" et ensuite "blabla $ a", cela ** ne peut pas fonctionner. – linuxfan

+0

Pas de désactivation des variables à effectuer pour ce cas. Comme pour le csh, c'est dans/bin. Une idée de pourquoi il affiche une variable indéfinie quand T.csh est exécuté alors que la déclaration a été faite dans le script? – Mike

0

Je poste une autre réponse parce qu'un commentaire est trop court. Regardez ce qui suit.

J'ai un script nommé /tmp/T.csh:

#!/bin/csh 
set a="blah" 
echo $a 
  1. Ma coquille est bash; Je tape /tmp/T.csh: le résultat est blah (csh a exécuté le script).
  2. Toujours dans bash; Je tape unset a; /tmp/T.csh $a: le résultat est le même.
  3. Toujours dans bash; Je tape . /tmp/T.csh: aucun résultat (bash a exécuté le script).
  4. Je tape csh; maintenant je suis dans csh.
  5. Je tape /tmp/T.csh: le résultat est blah (bien sûr).
  6. type I /tmp/T.csh $a: "a: Undefined variable"
  7. set a = something
  8. /tmp/T.csh $a: bla
  9. echo $a: quelque chose
  10. unset a
  11. echo $a: "a: Undefined variable"

J'ai répliqué tout ce que tu as fait. J'espère que cela t'aides. Vous obtenez une erreur pour ce que vous avez écrit sur la ligne de commande, pas pour le contenu de votre script. Même un simple echo, comme vous pouvez le voir ci-dessus, donne une erreur si vous sur la ligne de commande fait référence à une variable qui n'existe pas.

+0

est-ce que cela signifie que je ne peux pas appeler les valeurs de a, b et c à moins que je ne les mette en interactivité? Y a-t-il un autre moyen d'appeler ces variables comme argument de script? – Mike

+0

Je ne comprends pas ce que vous voulez. Considérons qu'un script csh a ses variables locales, et vous lui passez des arguments à partir de la ligne de commande. Peut-être que 'setenv' est votre ami, lire à ce sujet ou, comme dit précédemment, utiliser un shell plus firendly. – linuxfan

+0

ok, mon choix de commandes pourrait être en faute ici, ce que je veux vraiment, c'est assigner certains groupes de nombres (comme avec mes exemples) en variables, pour ce cas a, b et c à utiliser plus tard comme argument de mon scénario. Je pensais que l'ensemble peut faire l'affaire. Une idée de comment je peux faire ça? employant d'autres type de shell Im effrayé est hors de question et autant que possible, pas de réglage interactif de variables .. – Mike