我用一个简单的交互式菜单制作一个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
答案 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