处理未使用的getopts参数

时间:2018-09-13 17:43:35

标签: bash parameter-passing command-line-arguments getopts

我有一个以getopts开头的脚本,其外观如下:

USAGE() { echo -e "Usage: bash $0 [-w <in-dir>] [-o <out-dir>] [-c <template1>] [-t <template2>] \n" 1>&2; exit 1; }

if (($# == 0))
then
    USAGE
fi

while getopts ":w:o:c:t:h" opt
do
    case $opt in
        w ) BIGWIGS=$OPTARG
        ;;
        o ) OUTDIR=$OPTARG
        ;;
        c ) CONTAINER=$OPTARG
        ;;
        t ) TRACK=$OPTARG
        ;;
        h ) USAGE
        ;;
        \? ) echo "Invalid option: -$OPTARG exiting" >&2
        exit
        ;;
        : ) echo "Option -$OPTARG requires an argument" >&2
        exit
        ;;
    esac
done

more commands etc

echo $OUTDIR
echo $CONTAINER

我对getopts相当陌生。我正在对该脚本进行一些测试,并且在某个阶段,我不需要/不想使用-c参数[-c]。换句话说,我正在尝试测试脚本的另一个特定部分,而该部分完全不涉及$ CONTAINER变量。因此,我只需在$ CONTAINER的所有命令前添加#,然后进行一些测试就可以了。

在不使用$ CONTAINER的情况下测试脚本时,我输入:

bash script.bash -w mydir -o myoutdir -t mywantedtemplate

但是,我想知道,鉴于我的getopts命令,我没有收到警告。换句话说,为什么我没有收到要求-c参数的警告。这可能吗?仅在输入以下内容时才会出现警告吗?

bash script.bash -w mydir -o myoutdir -t mywantedtemplate -c

更新

做完一些测试后,我想就是这样:

  • 如果您未明确编写“ -c”,则getopts不会“向您”询问并给您一个错误(除非您的脚本对此进行了处理-即,如果您没有将#放在前面每个命令都使用此参数)
  • 仅当您输入“ -c”时才会出现错误

这正确吗?

0 个答案:

没有答案