Bash Shell脚本:如何限制getopt使其只接受一种类型的选项?

rlcwz9us  于 2023-02-05  发布在  Shell
关注(0)|答案(2)|浏览(123)

我使用getopts,对于选项我只想接受一种类型的字母,但它可以被多次传递。不知道如何做到这一点,但它应该像ls -l那样工作,ls -lllllllls -l -l -l -l -l都返回相同的内容,它只运行一次。

while getopts ":abc" opt; do
        case "$opt" in
                a) echo "a"
                ;;
                b) echo "b"
                ;;
                p) echo "c"
                ;;
                ?) echo "error"
                ;;
        esac
done

因此,在本例中,我希望./program.sh -a./program.sh -aaaaaaa(具有任意数量as)和./program.sh -a -a -a -a都只返回一次“a”,然后./program.sh -ab./program.sh -abc./program.sh -a -c之类的代码返回错误

c6ubokkw

c6ubokkw1#

不要在分析选项时采取行动。只记录看到的选项,然后采取行动。

while getopts ":abc" opt; do
        case "$opt" in
                a) A=1
                ;;
                b) B=1
                ;;
                c) C=1
                ;;
                ?) echo "error"
                ;;
        esac
done

if ((A + B + C > 1)); then
    printf 'Only one of -a, -b, -c should be used.\n' >&2
    exit 1;
fi

[[ $A == 1 ]] && echo "a"
[[ $B == 1 ]] && echo "b"
[[ $C == 1 ]] && echo "c"
8tntrjer

8tntrjer2#

您必须自己编写逻辑来处理同一个参数的多次调用。

A=0
while getopts ":a" option; do
        case "$option" in
                a) [[ $A != 1 ]] && echo "a" 
                   A=1
                ;;
                *) echo "error"
                ;;
        esac
done

相关问题