使用getopts的Bash不会返回预期的回显值

时间:2015-04-07 10:48:44

标签: bash

我正在尝试检查两个标志中是否存在其中一个。 -c-v

然而,在尝试运行以下时,我发现脚本退出而没有输出任何内容。

我已经看过在while getopts “:v:” opts; do语句中更改冒号的位置,这似乎没有任何改变。

有什么想法吗?

#Check that the $ACTION variable is of the form “-[character]"
if [[ ! $ACTION =~ ^-. ]] ; then
    echo "2";
    printHelp;
    exit 1;
fi 

#Too many arguments passed
if [[ ${#ACTION} -gt 2 ]] ; then
    echo "3";
    printHelp;
    exit 1;
fi

#Use cases for correct characters
while getopts “:v:” opts; do
    echo "4";
    case $opts in
        v)      echo "1234" #vocabTest;
                echo "${bold}STARTING VOCAB TEST:${reset}"
                break
                ;;
        c)      #phraseTest;
                echo "${bold}STARTING PHRASE TEST:${reset}"
                exit 0
                ;;
        ?)      echo "";
                printHelp
                exit 1
                ;;
    esac
done                    


}

1 个答案:

答案 0 :(得分:-1)

我删除了整个while循环,因为它没有用于任何目的。以下结束了工作:

    ##########################################################################################
# Check args passed to the script                                                        #
##########################################################################################
ACTION=$1;

#Check that the $ACTION variable is of the form “-[character]"
if [[ ! $ACTION =~ ^-. ]] ; then
    printHelp;
    exit 1;
fi 

#Too many arguments passed
if [[ ${#ACTION} -gt 2 ]] ; then
    printHelp;
    exit 1;
fi

#Use cases for correct characters
case ${ACTION} in
    (-v)    echo "${bold}STARTING VOCAB TEST:${reset}"
            ;;
    c)      #phraseTest;
            echo "${bold}STARTING PHRASE TEST:${reset}"
            exit 0
            ;;
    ?)      echo "";
            printHelp
            #exit 1
            ;;
esac