我在shell脚本中从命令提示符读取输入时遇到问题。我的脚本名称是status.ksh,我必须从命令提示符中获取参数。该脚本接受2个参数。 1st是“-e”,第二个是“server_name”。
当我运行这样的脚本时,
status.ksh -e server_name
echo $@
仅提供输出“server_name”,其中预期输出应为“-e server_name”
和echo $1
将输出设为NULL,其中预期输出应为“-e”。
请指导我,如何阅读第一个参数,即“-e”。
谢谢&此致
答案 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://www.livefirelabs.com/unix_tip_trick_shell_script/may_2003/05262003.htm