使用bash中的getopts覆盖无效选项消息

时间:2015-07-04 13:46:37

标签: bash shell

我正在使用getopts来跟踪为我的脚本提供的选项。但是,我希望能够检测指定的选项是否无效。我可以做到这一点,但它总会回应我没有写过的信息。

结果

my.sh: illegal option -- x
Error: Invalid option was specified --

我想要实现的目标

Error: Invalid option was specified --

我的代码片段

while getopts g:r: option; do
        case $option in
                g) guesses=$OPTARG;;
                r) range=$OPTARG;;
                ?) echo "Error: Invalid option was specified -- $OPTARG";;
        esac
done

如何达到预期效果?

3 个答案:

答案 0 :(得分:2)

假设您需要两个选项-g-r,以下示例在传递illegal option时不会触发-x消息:< / p>

while getopts ":g :r" option; do
    case $option in
        g) guesses=$OPTARG;;
        r) range=$OPTARG;;
        ?) echo "Error: Invalid option was specified -$OPTARG";;
    esac
done

答案 1 :(得分:1)

通过在标志之前添加:,我告诉getopts我想要控制不在我设置的列表中的标志。

答案 2 :(得分:0)

在bash中,您可以在开始解析之前将OPTERR设置为0:

OPTERR=0
while getopts 'option string' opt; do
    echo    "opt    = $opt"
    echo    "OPTIND = $OPTIND"
    echo    "OPTARG = $OPTARG"
    echo    "OPTERR = $OPTERR"
done