首页 > 解决方案 > 从 shellscript 中选择了一个选项,或者没有一个选项

问题描述

我不是 bash 脚本专家,我正在寻求帮助。我想在 while 循环条件的最后找到一种方法,除非选择了一个选项([-1|-2|-3])或者没有一个选项,否则脚本可以执行。

最好的方法是什么?我完全不知道该怎么做。非常感谢。

#!/bin/bash

echo "  $0 [-e <option_e>] [-f <option_f>]  [-1|-2|-3] [user@]fqdn"

OPTION1=""
OPTION2=""
OPTION3=""

while (( "$#" )); do
    if [ "$1" == "-1" ]; then
        OPTION1=1
    elif [ "$1" == "-2" ]; then
        OPTION2=1
    elif [ "$1" == "-3" ]; then
        OPTION3=1
    fi

   shift
done

我忘了提。这是脚本的一部分。此外,如果选择了 2 个以上的选项,则有几个条件可能会发生冲突。

编辑:有效的选择要么恰好是一个选项,要么为零,但不是两个或更多!

标签: bashshell

解决方案


谢谢 SamuelKirschner - 我确实添加了 [[ -n $ALL_OPTS ]] && 然后它起作用了!我现在很开心。

#!/bin/bash

OPTION1=""
OPTION2=""
OPTION3=""

while (( "$#" )); do
    if [ "$1" == "-1" ]; then
        OPTION1=1
    elif [ "$1" == "-2" ]; then
        OPTION2=1
    elif [ "$1" == "-3" ]; then
        OPTION3=1
    fi

   shift
done

ALL_OPTS="$OPTION1$OPTION2$OPTION3";
echo $ALL_OPTS
if [[ -n $ALL_OPTS ]] && [[ $ALL_OPTS -ge 2 ]];then
    echo 'Please provide a maximum of one of the options [-1|-2|-3]' 1>&2
    exit 1
fi

推荐阅读