Bash脚本无限循环失效求助:代码仅执行一次即停止
解决Bash脚本无限循环的问题
嘿,我瞅了下你的脚本,问题出在这几个地方:
- 当你输入
order时,break会直接跳出外层的while true循环,执行完姓名和电话的输入后脚本就结束了,自然没法循环 - 输入无效选项时用
exec bash "$0"是重启整个脚本,不是真正的循环,还会丢掉当前的进程上下文
给你改好了,这样就能实现无限循环,每次完成订单输入后会回到选择界面,无效输入也只会重新提示,不会重启脚本:
#!/bin/bash while true do read -p "make a choice (order/quit) " order case $order in order ) # 执行订单信息输入 read -p " your name : " name read -p "your telephone? " phone printf "======================================================\n" echo Hello $name: printf "======================================================\n" echo Your telephone is $phone # 输入完成后回到循环开头,等待下一次选择 continue ;; quit ) # 退出脚本 exit 0 ;; * ) echo "is not a valid." # 回到循环开头重新提示选择 continue ;; esac done
关键修改点:
- 把姓名电话的输入逻辑移到了
order选项的分支里,这样执行完后通过continue回到循环开头,不会跳出整个while循环 - 去掉了
exec bash "$0",换成continue,无效输入后直接重新提示选择,更高效也更符合循环的逻辑 - 给
exit加上了0(正常退出状态码),规范脚本的退出行为
内容的提问来源于stack exchange,提问作者Robert
相关产品推荐
相关产品推荐

