Bash Shell - 具有多个字母的阅读选项

Ric*_*ado 0 unix bash shell

我正在开发一个允许用户设置选项的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,使用类似的代码?先感谢您.

buf*_*uff 5

尝试以下(简化):

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).