bash - 非尾部位置的可选参数

时间:2016-01-24 03:54:24

标签: bash

我正在写一个可以带2-4个参数的脚本:

arg1 arg2 arg3 arg4

arg2arg3是必填项,我们会提供,但arg1arg4是可选的。在三参数的情况下,我如何检查是否给出arg4

如果参数的数量是4,那么这是显而易见的;但是,只有三个参数,我无法判断它是否存在arg1arg4,如下例所示:

./script arg2 arg3 arg4

1 个答案:

答案 0 :(得分:1)

作为e0k评论,你需要重新思考你如何传递你的论点。对于可选的东西,你应该使用...选项。像

prog -a arg1 -b arg4 arg2 arg3
prog -a arg1 arg2 arg3
prog -b arg4 arg2 arg3
prog arg2 arg3

所以

#!/bin/bash

arg1="default value for arg1"
arg4="default value for arg4"
while getopts a:b: opt; do
    case $opt in
        a) arg1=$OPTARG ;;
        b) arg4=$OPTARG ;;
    esac
done
shift $((OPTIND-1))
if [[ "$#" -ne 2 ]]; then
    echo "ERROR: you failed to provide 2 mandatory arguments" >&2
    exit 1
fi
arg2=$1
arg3=$2

# do stuff with "$arg1", "$arg2", "$arg3", "$arg4"