对于两个连续的选项,`getopts`将第二个选项作为第一个参数

时间:2013-06-26 17:10:45

标签: linux shell unix scripting

我有一个代码:

    while getopts ab:cde:f opt
    do
        case ${opt} in
            b|e)
                [[ ${OPTARG} = -* ]]   && usage "Invalid parameter \"${OPTARG}\" provided for agurment \"-        ${opt}!\""
                [[ ${#OPTARG} -eq 0 ]] && usage "Argument \"-${opt}\" requires a parameter!${OPTARG}"
            ;;
        esac

        case $opt in
            a) minusa=$opt;;
            b) minusb=$opt
            file_b=$OPTARG;;
            c) minusc=$opt;;
            d) minusd=$opt;;
            e) minuse=$opt
            file_e=$OPTARG;;
            f) minusf=$opt;;
            /?) echo Unrecognized parameter
             exit 1;;
        esac

    done
    echo  "minusa:$minusa","minusb:$minusb","file_b:$file_b","minusc:$minusc","minusd:$minusd","minuse:$minuse","file_e:$file_e","minusf:$minusf"

简单的代码,只是为了理解getopts命令的行为。当我运行脚本时:

    ./eg2 -b -f
    ./eg2: line 7: usage: command not found
    minusa:,minusb:b,file_b:-f,minusc:,minusd:,minuse:,file_e:,minusf:

选项-b的参数为-f。我想要打印:

     [[ ${OPTARG} = -* ]]   && usage "Invalid parameter \"${OPTARG}\" provided for agurment \"-${opt}!\""

在代码中我到底出错了?对于选项-b-e,如果没有参数,我想打印:

    [[ ${#OPTARG} -eq 0 ]] && usage "Argument \"-${opt}\" requires a parameter!${OPTARG}"

请解释一下。

2 个答案:

答案 0 :(得分:1)

你在getopts行的“b”后面放了一个“:”。这告诉它期待之后的争论。如果您不希望将下一个参数视为-b的参数,请删除“:”。

答案 1 :(得分:0)

[[ "${OPTARG}" =~ "^-[a-z]" ]] && echo "Invalid parameter \"${OPTARG}\" provided for agurment \"-${opt}!\""解决了这个问题......谢谢