getopts bash脚本接受无法识别的标志

时间:2019-07-10 09:25:06

标签: bash getopts

我似乎无法弄清楚为什么我的简单bash脚本解析未声明的标志。这是它的外观:

#!/bin/bash 

while getopts "hi" OPTIONS
do

        case $OPTIONS in
                   h)     
                        echo "usage:"
                        echo "./scriptname.sh [options]"
                        echo " "
                        echo "options:"
                        echo "-i              install it"
                        echo "-h              show help menu"
                        exit 0
                        ;;

                   i)     
                        echo "this is function -i"
                        exit 0
                        ;;
                \?)
                        echo "illegal option"
                        exit
                        ;;
        esac
done

发生的事情是,当传递-h和-i时,它工作得很好,但是,如果键入-isomething和-hsomethingelse,它仍将返回为h和i声明的选项,因为它似乎忽略了-之后键入的任何其他内容。我和-h。

基本上,脚本应该仅解析-i和-h并返回“非法选项”,即使选项以-i或-h开头,例如-医院。

我尝试用:将getopts中的两个字母分隔开,但是-i或-h可以这样工作,具体取决于:的位置。

示例

while getopts "h:i:" OPTIONS
do

谢谢

0 个答案:

没有答案