Bash反复调用函数
Im使用bash版本3.2.57(1)-发布版(x86_64-apple-darwin14) 如何重复调用函数直到用户决定退出 如果我将函数放在while循环的顶部,就会调用它,但它会重复执行Bash反复调用函数,bash,input,while-loop,user-input,repeat,Bash,Input,While Loop,User Input,Repeat,Im使用bash版本3.2.57(1)-发布版(x86_64-apple-darwin14) 如何重复调用函数直到用户决定退出 如果我将函数放在while循环的顶部,就会调用它,但它会重复执行 call_func () { echo "Im inside call_func" echo "some text: " >> file.txt } while true do echo
call_func () {
echo "Im inside call_func"
echo "some text: " >> file.txt
}
while true
do
echo "1) call_func "
echo "q) to quit"
echo "\n"
echo "Enter your selection \c"
read answer
case "$asnwer" in
q|Q) exit;;
call_func
esac
done
如果我将函数放在while循环的顶部,就会调用它,但它会重复执行
call_func () {
echo "Im inside call_func"
echo "some text: " >> file.txt
}
while true
do
echo "1) call_func "
echo "q) to quit"
echo "\n"
echo "Enter your selection \c"
read answer
case "$asnwer" in
q|Q) exit;;
call_func
esac
done
是的。您做得对,函数确实应该位于case
语句的上方(外部)。你的问题是:
调用函数
中的“asnwer”一案
q | q)退出;;
以撒
这是正确的,但是您在case块中使用了字符串asnwer
。您打算使用变量:
调用函数
案例$
q | q)退出;;
以撒
进行此更改后,您应该能够通过键入“q”正确地退出循环。我之前的回答涵盖了如何修复现有代码,这里我将推荐一种更好的方法(考虑到您具体使用的是
bash
):
在call\u func quit中选择应答;做
案例$
(call_func)call_func;;
(退出)休息;;
(“”)echo“未知选项。再次按回车键查看可用选项。”;;
以撒
完成
使用上述脚本的示例会话:
1)调用函数
2) 退出
> 1
我是内线电话
> 6
未知选项。再次按return可查看可用选项。
>
1) 调用函数
2) 退出
> 2
bash中的select
关键字将自动为您设置一个编号菜单,并循环接收输入。它还将用户提供的号码转换为该号码提供的文本(call_func
或quit
)
select
记录在bash手册页中,但基本上由三部分组成:
在项目列表中选择VARIABLENAME
做
密码
完成
其中,
VARIABLENAME
是用户做出选择时要设置的变量,LIST OF ITEMS
是要显示的选择列表,code
是用户做出选择时要执行的代码。select
构造是一个循环,因此它将一直执行,直到您在推荐阅读:help break
中的case“$answer”应该是?我相信它解决了问题提出的问题,正如问题作者所期望的那样。如果不是这样,请向我说明。该函数仅在第一次调用时才被调用,当该函数完成并且用户再次选择该函数时,它不会再次被调用。我的实际函数正在调用另一个函数。这与此有关吗?如果多次调用函数时遇到问题,是否可以显示该函数的代码(编辑到问题中)?我认为问题可能出在功能上。