2009-10-15 5 views
0

j'ai script shell unix qui est nécessaire de courir comme ci-dessousproblème dans l'exécution d'un script

test_sh XYZ=KLMN 

le contenu du script est

#!/bin/ksh 

echo $XYZ 

pour utiliser la valeur de XYZ je dois faire set -k avant d'exécuter le script.

Y a-t-il un moyen de le faire sans doint set -k avant d'exécuter le script? ou est-il quelque chose que je peux faire dans le script où je peux utiliser la valeur du paramètre donné lors de l'exécution du script de la manière ci-dessous

test_sh XYZ=KLMN 

J'utilise ksh. Toute aide est appréciée.

+0

Vous avez reçu de bonnes réponses pour vos devoirs ici: http://stackoverflow.com/questions/1570383/problem-in-a-shell-command –

Répondre

0

Il semble que vous essayez d'utiliser la variable d'environnement "INSTANCE" dans votre script.

Pour cela, la variable d'environnement doit être définie avant l'exécution de votre script. L'utilisation de la commande "set" permet de définir des variables d'environnement exportables. Incidemment, ma version de ksh date de 1993 et ​​l'option "-k" était obsolète à l'époque.

Pour définir une variable d'environnement afin qu'il soit exporté dans des coquilles donné naissance, il suffit d'utiliser la commande « export » comme ceci:

export INSTANCE='whatever you want to put here' 

Si vous souhaitez utiliser un paramètre de position pour votre script - c'est ont la valeur « KLMN » accessible au sein de votre script, et en supposant qu'il est le premier paramètre, vous effectuez les opérations suivantes dans votre script:

#!/bin/ksh 

echo $1 

vous pouvez également affecter le paramètre de position à une variable locale pour une utilisation ultérieure dans votre script comme ça:

#!/bin/ksh 

param_one=$1 
echo $param_one 

Vous pouvez appeler cela avec:

test_sh KLMN 

Notez que l'espacement dans l'affectation est important - ne pas utiliser des espaces.

4

Que diriez-vous de l'exécuter?

XYZ=KLMN ./test_sh //running from directory where test_sh is 
+1

synonyme d'utilisation de l'externe/usr/bin/env, qui est neutre shell : env XYZ = KLMN ./test.sh –

+0

contrainte est que je dois exécuter le script de cette façon seulement test_sh XYZ = KLMN – Vijay

3

Si votre script n'a pas besoin d'autres arguments, d'une façon rapide et sale à faire est de mettre

eval "[email protected]" 

au début de votre script. Cela évaluera les arguments de la ligne de commande en tant que commandes shell. Si ces commandes doivent assigner une variable shell/environnement, alors c'est ce que ça va faire.

Il est rapide et sale puisque tout peut être mis sur la ligne de commande, causant des problèmes d'une erreur de syntaxe à un trou de sécurité (si le script est fiable). Je ne suis pas sûr si "$ @" signifie la même chose dans ksh que dans bash - en utilisant seulement $ * (sans guillemets) cela fonctionnerait aussi, mais c'est encore plus sale.

+0

+1 Je pense que dans ce cas un simple eval $ 1 fera –

0

Je suis Tring cette option

#!/bin/ksh 

echo $1 
awk '{FS="=";print $2}' $1 

et sur la ligne de commande

test_sh INSTANCE=LSN_MUM 

mais awk est failing.is-il un problème ici?

+1

Cela traite '$ 1' comme un fichier prénom. Vous devriez faire écho à travers un tuyau pour vous éveiller à la place. –

0

Probablement #!/bin/ksh -k fonctionnera (non testé).