2009-10-15 38 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將工作(未經測試)。