Bash Scripting:你可以自己进行函数调用吗?

时间:2017-07-13 18:43:08

标签: bash shell

我用一个简单的交互式菜单制作一个bash脚本,询问是或否的问题。我想知道我是否可以使用一个函数来调用自己并在该人写随机垃圾时重新启动提示,这可能吗?

代码:

Question () {
read -r -p "yes or no quesiotn [Y/N]"
Response

case Response in
    Y|y)
        #some code
        ;;
    N|n)
        #more code
        ;;
    *) 
        ehco "im sorry i didnt catch that"
        Question
        ;;
    esac
}

Question

2 个答案:

答案 0 :(得分:4)

不要自己调用,而是让函数返回适当的退出代码,(1表示失败,0表示成功),然后执行无操作until循环工作:

Question () {
            read -r -p "Yes or no question [Y/N]?" Response
            case "$Response" in
                 Y|y)
                     #some code
                     ;;
                 N|n)
                     #more code
                     ;;
                 *) 
                     echo "I'm sorry I didn't catch that."
                     return 1
                     ;;
            esac
            }


until Question ; do : ; done

答案 1 :(得分:2)

虽然在这种情况下可以使用递归,但不建议使用递归,因为您将消耗每个错误响应的内存(以跟踪函数调用)。相反,只需使用循环。

while true; do
    read -r -p "yes or no question [Y/N] " response
    case "$response" in
        Y|y)
          # some code
          ;;
        N|n)
          # more code
          ;;
        *) echo "please provide a valid response"
           continue ;;
    esac
    break
done