通过命令提示符读取参数(以“ - ”开头)

时间:2013-04-14 15:29:04

标签: linux shell unix

我在shell脚本中从命令提示符读取输入时遇到问题。我的脚本名称是status.ksh,我必须从命令提示符中获取参数。该脚本接受2个参数。 1st是“-e”,第二个是“server_name”。

当我运行这样的脚本时,

status.ksh -e server_name

echo $@

仅提供输出“server_name”,其中预期输出应为“-e server_name”

echo $1将输出设为NULL,其中预期输出应为“-e”。

请指导我,如何阅读第一个参数,即“-e”。

谢谢&此致

2 个答案:

答案 0 :(得分:1)

问题是由-e引起的。这是echo的标志。

   -e     enable interpretation of backslash escapes

大多数unix命令允许--用于分隔标志和其余参数,但echo不支持此功能,因此您需要另一个命令:

printf "%s\n" "$1"

如果您需要复杂的命令行参数解析,请务必使用Joe建议的getopts

答案 1 :(得分: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