bash 脚本中的 case 语句不起作用。下面是我的 shell 脚本的片段。
usage="Usage: \n servicer [ service argument ] {-h}\n"
invalid="\n not a valid option\n"
argument="\n Please use -h option for help\n"
while getopts ":h:s" option
do
case "${option}" in
s ) service=$OPTARG;;
h ) echo -e $usage
exit 0
;;
* ) echo -e $invalid
exit 1
;;
esac
done
因此,每当我使用 -h 或 -s 选项运行脚本时,流程都会转到最后一个 * 选项。
答案1
这man getops
页面不是最容易阅读的。很确定你想要getopts "hs:"
。冒号表示前一个选项(字母)的选项参数(参数值)。
不需要
h
参数,所以没有冒号(:)。需要
s
一个参数,因此没有参数的s:
.s
也是无效的,因为冒号需要一个参数。其余内容均无效。
我还会将静态字符串(usage=, invalid=, argument=
)放在单引号中,并将输出放在双引号中。
usage='Usage: \n servicer [ service argument ] {-h}\n'
invalid='\n not a valid option\n'
argument='\n Please use -h option for help\n'
while getopts "hs:" option; do
case "${option}" in
s) service="$OPTARG"
;;
h) echo -e "$usage"
exit 0
;;
*) echo -e "$invalid"
exit 1
;;
esac
done