我有一个脚本:
#!/bin/sh
function usage() {
cat << EOF >&2
Usage: $0 [-h] [-rs <start_num>] [-re <end_num>]
-h: help: displays list of options for command $0
-rs<int>: range start: should be the number to go from - the lower of the two ranges. <int>
-re<int>: range end: should be the number to add up to - the highest of the two ranges. <int>
EOF
exit 1
}
function addition() {
sum=0
for number in "$@"; do
sum=$(( sum + number))
done
# set defaults
rangeStart=0
rangeEnd=0
error=false
# loop arguments
OPTIND=1
while getopts rs:re:h: o; do
case $o in
rs) rangeStart=$OPTARG;;
re) rangeEnd=$OPTARG;;
h) usage;;
*) error=true;;
esac
done
shift $((OPTIND - 1))
echo $rangeStart
echo $rangeEnd
if [ "$error" = true ] ; then
echo 'Invalid argument passed. See addition -h for usage.'
else
echo 'Total: '$sum
fi
}
目前,我只是想添加命令参数,以便用户可以键入:
$ addition -rs 4 -re 10
它从 4 循环到 10(因此添加4 + 5 + 6 + 7 + 8 + 9 + 10
)并输出总数。
但执行上述操作会返回以下输出:
0
0
传递的参数无效。有关用法,请参见附加 -h。
所以它没有识别我的参数。当我将命令更改为:
$ addition -rs4 -re10
它输出相同..我在我的脚本中做错了什么?
getopts
内置只能处理单字符选项;你必须使用类似的东西我还在 之后去掉了冒号
h
,因为您可能不想为-h
.