2009-10-15 40 views
0

我有UNIX shell脚本是需要像脚本下面问题在运行一个脚本

test_sh XYZ=KLMN 

内容运行是

#!/bin/ksh 

echo $XYZ 

使用我有做XYZ的值在我运行该脚本之前,请使用set -k

有没有一种方法,我可以做到这一点,没有doint设置-k运行脚本之前。或者是有什么我可以在脚本做在那里我可以使用以下方式

test_sh XYZ=KLMN 

我使用KSH运行脚本时给出的参数值。 任何帮助表示赞赏。

+0

你在这里收到你的家庭作业的好答案:http://stackoverflow.com/questions/1570383/problem-in-a-shell-command – 2009-10-15 13:07:15

回答

0

看起来你正试图在你的脚本中使用环境变量“INSTANCE”。

为此,必须在执行脚本之前设置环境变量。使用“set”命令设置可导出的环境变量。顺便说一句,我的ksh版本的日期从1993年开始,当时“-k”选项已经过时。

设置环境变量,使其输出到衍生弹,只需使用“导出”命令,像这样:

export INSTANCE='whatever you want to put here' 

如果你想使用一个位置参数,为您的脚本 - 那是已在“KLMN”值在脚本中访问,并假设它是第一个参数,那么你将在你的脚本如下:

#!/bin/ksh 

echo $1 

您也可以将位置参数分配给在以后使用一个局部变量你的脚本是这样的:

#!/bin/ksh 

param_one=$1 
echo $param_one 

你可以调用这个:

test_sh KLMN 

注意的是,在分配的间距是非常重要的 - 不要使用空格。

4

如何运行?

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

使用外部/ usr/bin/env的同义词,它是shell中立的:env XYZ = KLMN ./test.sh – 2009-10-15 11:43:08

+0

contraint是我必须以这种方式运行脚本test_sh XYZ = KLMN – Vijay 2009-10-15 11:45:46

3

如果你的脚本不需要其他参数,一个快速和肮脏的方式做的是把

eval "[email protected]" 

在脚本的开始。这会将命令行参数评估为shell命令。如果这些命令要分配一个shell /环境变量,那就是它会做的。

它的快速和肮脏的,因为什么事情都可能在命令行上放,导致从语法错误问题,一个糟糕的安全漏洞(如果脚本被信任)。

我不知道,如果“$ @”是指在KSH同它在bash - 只用$ *(不带引号)将工作太,但更脏。

+0

+1我认为在这种情况下,一个简单的评估$ 1将做 – 2009-10-15 12:28:55

0

我特林此选项

#!/bin/ksh 

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

和命令行

test_sh INSTANCE=LSN_MUM 

上,但是AWK是在这里failing.is有什么问题吗?

+1

这就是将'$ 1'视为一个文件名称。你应该通过一个管道回应awk来代替。 – 2009-10-15 13:05:17

0

可能#!/bin/ksh -k将工作(未经测试)。