getopts调用函数不会给出任何结果



你好,我试图在学校做一个项目,但我有一个小问题,当我试图通过getopts执行函数时,我没有得到任何结果,我现在卡住了。

我在getopts中调用函数的方式有问题吗?因为如果我尝试用-h显示帮助菜单,效果很好,但尝试用-c进行乘法不会得到任何结果

usage(){
echo -e "Example Usage:"
echo -e "myscript.sh [-h] [-n1] [-n2] [-c]"       
exit 0
}
calculator(){
echo "$num1*$num2"
mul=$(( $num1*$num2 ))
echo Result $mul
exit 0
}
while getopts ":n1:n2:c:h" o; do
case "${o}" in
n1)
num1=${OPTARG}
;;      
n2)
num2=${OPTARG}
;;  
c)
calculator
;;  
h)
usage
;;
*)
#usage
;;
esac
done

getopts解析短选项,短选项是一个短划线("-"(和一个字母或数字。空头期权的例子有-2、-d和-d。它可以还可以组合解析短选项,例如-2dD。

将n1和n2更改为一个字母x,y。

如果选项需要一个参数,getopts将获取该参数,并将其放入$OPTARG中。如果找不到预期的参数,则变量optname被设置为冒号(":"(。Getopts然后递增位置索引$OPTIND,指示要已处理。

删除":"在c.之后->而getopts";x: y:ch";o;做c不期望参数

usage(){
echo -e "Example Usage:"
echo -e "myscript.sh [-h] [-x] [-y] [-c]"
exit 0
}
calculator(){
echo "$num1*$num2"
mul=$(( $num1*$num2 ))
echo Result $mul
exit 0
}
while getopts "x:y:ch" o; do
case "${o}" in
x)
num1=${OPTARG}
;;
y)
num2=${OPTARG}
;;
c)
calculator
;;
h)
usage
;;
*)
#usage
;;
esac
done

./myscript.sh -x 3 -y 4 -c
3*4
Result 12

如果你不想使用长选项:

optspec="x:y:ch-:"
while getopts "$optspec" optchar; do
case "${optchar}" in
-)
case "${OPTARG}" in
n1) num1="${!OPTIND}"; OPTIND=$(( $OPTIND + 1 ));;
n2) num2="${!OPTIND}"; OPTIND=$(( $OPTIND + 1 ));;
n1=*) num1=${OPTARG#*=};;
n2=*) num2=${OPTARG#*=};;
*)
if [ "$OPTERR" = 1 ] && [ "${optspec:0:1}" != ":" ]; then
usage
fi
;;
esac;;
h) usage;;
c) calculator;;
x) num1=${OPTARG};;
y) num2=${OPTARG};;
*)
if [ "$OPTERR" != 1 ] || [ "${optspec:0:1}" = ":" ]; then
echo "Non-option argument: '-${OPTARG}'" >&2
fi
;;
esac
done

./myscript.sh --n1 3 -n2 4 -c
or 
./myscript.sh --n1=3 -n2=4 -c
3*4
Result 12

最新更新