考虑:
#!/bin/sh
while getopts ":h" o; do
case "$o" in
h )
"Usage:
sh $(basename "$0") -h Displays help message
sh $(basename "$0") arg Outputs ...
where:
-h help option
arg argument."
exit 0
;;
\? )
echo "Invalid option -$OPTARG" 1>&2
exit 1
;;
: )
echo "Invalid option -$OPTARG requires argument" 1>&2
exit 1
;;
esac
done
这个调用返回not found
为什么?
$ sh getopts.sh -h
getopts.sh: 12: getopts.sh: Usage:
sh getopts.sh -h Displays help message
sh getopts.sh arg Outputs ...
where:
-h help option
arg argument.: not found
还行吧:
$ sh getopts.sh arg
对于这个,我期待“无效选项”:
$ sh getopts.sh
还行吧:
$ sh getopts.sh -s x
Invalid option -s
您似乎错过了打印消息,而是将整个字符串作为运行命令传递。
echo
在字符串前加一个但通常更喜欢添加一个heredoc的风格来打印出多行字符串
并使用标志的
show_help
功能-h
。同样对于空参数标志,第一次调用
getopts()
退出循环,因此循环内不能有句柄。在调用之前对空参数进行通用检查getopts()
使用您先前对参数 flag 的定义
:h
,建议-h
不接受任何参数。该子句:)
仅在您定义-h
为采用参数时适用,即定义为时:h:
。只有这样你才能运行它而不传递代码下的参数:)
被执行。将整个脚本放在一起现在运行它