2

我正在尝试编写代码来检查是否有任何参数(在位置 N)等于“--check”,如果它是真的,则要求存在下一个参数(位置 N+1)。否则,退出。

我怎样才能做到这一点?

我正在尝试这样的事情,但它似乎不起作用:我正在重申参数,如果找到“--check”,则将 FLAG 设置为 1,这会触发 nextArg 的另一个条件检查:

FLAG=0   
for i in "$@"; do     

    if [ $FLAG == 1 ] ; then  
            nextARG="$i"  
            FLAG=0  
    fi  
    if [ "$i" == "--check" ] ; then  
            FLAG=1  
    fi  
done  

if [ ! -e $nextARG ] ; then  

    echo "nextARG not found"  
    exit 0
fi
4

2 回答 2

2

我会去getopts。该链接显示了一个示例,您可以如何检查缺少的参数。

于 2013-08-24T21:23:28.040 回答
1

你可以使用这样的表格。在解析参数时,我将其用作一般方法。而且我发现它比使用getopts.

while [[ $# -gt 0 ]]; do
    case "$1" in
    --option)
        # do something
        ;;
    --option-with-arg)
        case "$2" in)
        check_pattern)
            # valid
            my_opt_arg=$2
            ;;
        *)
            # invalid
            echo "Invalid argument to $1: $2"
            exit 1
            ;;
        esac
        # Or
        if [[ $# -ge 2 && $2 == check_pattern ]]; then
            my_opt_arg=$2
        else
            echo "Invalid argument to $1: $2"
            exit 1
        fi
        shift
        ;;
    *)
        # If we don't have default argument types like files. If that is the case we could do other checks as well.
        echo "Invalid argument: $1"
        # Or
        case $1 in
        /*)
            # It's a file.
            FILES+=("$1")
            ;;
        *)
            # Invalid.
            echo "Invalid argument: $1"
            exit 1
            ;;
        esac
    esac
    shift
done
于 2013-08-24T21:14:01.223 回答