是否可以使用 getopts 一起处理多个选项?例如,myscript -iR 或 myscript -irv。
另外,我遇到的情况是,基于条件脚本需要强制选项。例如,如果脚本的参数是一个目录,我将需要指定 -R 或 -r 选项以及任何其他选项(myscript -iR mydir 或 myscript -ir mydir 或 myscript -i -r mydir 或 myscript -i -R mydir),如果是文件,仅 -i 就足够了(myscript -i myfile)。
我尝试搜索但没有得到任何答案。
您可以连接您提供的选项和getopts
会将他们分开。在你的case
声明您将单独处理每个选项。
您可以在看到选项时设置一个标志,并检查以确保强制“选项”(!)出现在getopts
循环已完成。
这是一个例子:
#!/bin/bash
rflag=false
small_r=false
big_r=false
usage () { echo "How to use"; }
options=':ij:rRvhm'
while getopts $options option
do
case "$option" in
i ) i_func;;
j ) j_arg=$OPTARG;;
r ) rflag=true; small_r=true;;
R ) rflag=true; big_r=true;;
v ) v_func; other_func;;
h ) usage; exit;;
\? ) echo "Unknown option: -$OPTARG" >&2; exit 1;;
: ) echo "Missing option argument for -$OPTARG" >&2; exit 1;;
* ) echo "Unimplemented option: -$option" >&2; exit 1;;
esac
done
if ((OPTIND == 1))
then
echo "No options specified"
fi
shift $((OPTIND - 1))
if (($# == 0))
then
echo "No positional arguments specified"
fi
if ! $rflag && [[ -d $1 ]]
then
echo "-r or -R must be included when a directory is specified" >&2
exit 1
fi
这代表了一个完整的参考实现getopts
函数,但只是一个更大脚本的草图。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)