2013-04-14 31 views
0

從shell腳本中的命令提示符讀取輸入時遇到問題。我的腳本名稱是status.ksh,我必須從命令提示符處取參數。該腳本接受2個參數。第一個是「-e」,第二個是「server_name」。通過命令提示符讀取參數(以「 - 」開頭)

當我運行這樣的腳本,

status.ksh -e服務器名

echo [email protected] 

只給出輸出「服務器名稱」,其中預期輸出應該是「-e服務器名」

echo $1輸出爲NULL,其中預期輸出應爲「-e」。

請指導我如何閱讀獲取第一個參數,即「-e」。

感謝&問候

+0

它應該工作。確保你使用正確的解釋器執行正確的文件。 –

+0

Hi Karoly,上述腳本工作不正常,但由Joe提供的解決方案運行良好。 – orNehPraka

+0

嗯..你是對的,我沒有足夠的努力......看到我的答案。 –

回答

0

你讀過這個參考? http://www.lehman.cuny.edu/cgi-bin/man-cgi?getopts+1

您不應該使用$ 1,$ 2,$ @等解析選項。有內置的,可以處理這個給你。

Example 2 Processing Arguments for a Command with Options 

The following fragment of a shell program processes the 
arguments for a command that can take the options -a or -b. 
It also processes the option -o, which requires an option- 
argument: 

    while getopts abo: c 
    do 
     case $c in 
     a | b) FLAG=$c;; 
     o)  OARG=$OPTARG;; 
     \?)  echo $USAGE 
      exit 2;; 
     esac 
    done 
    shift `expr $OPTIND - 1` 

更多的例子:

http://linux-training.be/files/books/html/fun/ch21s05.html

http://publib.boulder.ibm.com/infocenter/pseries/v5r3/index.jsp?topic=/com.ibm.aix.cmds/doc/aixcmds2/getopts.htm

http://www.livefirelabs.com/unix_tip_trick_shell_script/may_2003/05262003.htm

+0

嗨@Joe,還需要一個幫助。我要讀的一個參數是「?」本身,因爲我使用的情況下,它的默認選項是「?」。你能在這種情況下幫助我嗎? status.ksh -e server_name -s sname - ? – orNehPraka

+0

我還沒有想過這種可能性。對不起,我不知道。 –

1

的問題是由-e引起的。這是echo的標誌。

-e  enable interpretation of backslash escapes 

大多數UNIX命令允許--被用來分離標誌和自變量的休息,但echo不支持此功能,因此你需要另一個命令:

printf "%s\n" "$1" 

如果您需要複雜的命令行參數解析,絕對按照喬建議的getopts

+0

嗨Karoly,你是絕對正確的。感謝您的澄清。 – orNehPraka