Bash 脚本接受命令行参数后给出的选项

Bash 脚本接受命令行参数后给出的选项

我有一个 bash 脚本,它接受许多可选标志和两个必需参数。目前,如果命令行调用是~/script.sh -a -b arg1 arg2它工作得很好,但如果调用是~/script.sh arg1 arg2 -a -b它无法识别-a并被-b设置。这是一个简单的例子:

#!/usr/bin/env bash
while :; do
    case $1 in
        -a)
            flag_a=true
        ;;
        -b) 
            flag_b=true
        ;;
        *) ## cause of problem: breaks the loop when the first argument is encountered
            break
    esac
    shift
done
arg_1=$1
arg_2=$2
if [ -z ${arg_1:+x} ] || [ -z ${arg_2:+x} ]; then
    echo -e "\n:-( ERROR: two arguments are required" | tee -a /dev/tty 1>&2
    exit 1
fi
flag_a=${flag_a:-false}
flag_b=${flag_b:-false}
if [ "$flag_a" = true ]; then
    echo "arg_1 is $arg_1"
fi
if [ "$flag_b" = true ]; then
    echo "arg_2 is $arg_2"
fi
if [ ! "$flag_a" = true ] && [ ! "$flag_b" = true ]; then
    echo "no options set"
fi
exit 0

有没有办法接受必需参数后面列出的可选标志?我可以以某种方式保存找到的参数*),然后$*在完成while循环后将它们添加回数组吗?

相关内容