我正在开发一个允许用户设置选项的shell脚本.如果用户单独指定选项,则脚本正常工作.例如:
./my_file.sh -r -l directory1 directory2
Run Code Online (Sandbox Code Playgroud)
上面的命令工作正常,但是如果用户指定以下命令,则我的脚本不起作用:
编辑:我的意思是,-l如果用户输入以下命令,则无法识别该选项
./my_file.sh -rl directory1 directory2
Run Code Online (Sandbox Code Playgroud)
这是我用来阅读选项的代码
while getopts 'lvibrd:v' flag; do
case "${flag}" in
l) option_l=true
shift ;;
v) option_v=true
shift ;;
i) option_i=true
shift ;;
b) option_b=true
shift ;;
r) option_r=true
shift ;;
d) option_d=true
shift ;;
*) echo "Invalid options ${flag}"
exit 1 ;;
esac
done
Run Code Online (Sandbox Code Playgroud)
有没有办法用多个字母读取选项,例如-rl,使用类似的代码?先感谢您.
尝试以下(简化):
while getopts 'lr' flag; do
case "$flag" in
l) echo "option -l was set";;
r) echo "option -r was set";;
*) echo "Invalid options ${flag}"
exit 1 ;;
esac
done
shift $(($OPTIND - 1))
echo "$@"
Run Code Online (Sandbox Code Playgroud)
省略有所作为shift.getopts内置的变化混乱.
这适用于单个和组合选项:
$ ./nic.sh -rl hello world
option -r was set
option -l was set
hello world
Run Code Online (Sandbox Code Playgroud)
编辑:我添加了代码来打印其余的参数(在处理之后getopts).
| 归档时间: |
|
| 查看次数: |
275 次 |
| 最近记录: |