如何让Bash函数在CASE语句选择YES后继续执行后续逻辑?
解决Bash函数中选择YES后继续执行后续逻辑的问题
我来帮你搞定这个Bash函数的问题!你的代码里主要有两个核心问题:一是没有读取用户输入到$opt变量,导致case判断根本拿不到用户的选择;二是y分支的逻辑是空的,不知道怎么让流程继续往下走。下面是修正后的完整方案:
修正后的完整代码
function doit { # 用read -p直接输出提示并读取用户输入到opt变量 read -p "Do you want to continue? {y/n} " opt case $opt in y) echo "正在进入架构选择环节..." # 这里不需要额外操作,case执行完毕后会自动继续后续代码 ;; n) exit ;; *) # 处理无效输入,提示后重新调用函数 echo "输入无效!请输入y或n。" doit ;; esac # 读取架构选择的输入,用单独变量避免混淆 read -p "32b or 64b? {32/64} " arch_opt case $arch_opt in 32) do32 ;; 64) do64 ;; *) echo "输入无效!请输入32或64。" # 再次询问,仍无效则退出 read -p "32b or 64b? {32/64} " arch_opt case $arch_opt in 32) do32 ;; 64) do64 ;; *) echo "多次输入无效,程序退出。"; exit ;; esac ;; esac }
关键改动说明
- 读取用户输入:原代码只输出了提示,但没把用户的输入存到
$opt里,所以case判断完全无效。这里用read -p命令,既能直接输出提示文本,又能把用户输入存入变量。 - y分支逻辑:当用户输入
y时,只需要让case分支执行完毕,函数就会自动继续执行后面的32/64位选择代码,不需要额外的跳转命令。如果需要提示用户,可以加一句echo说明。 - 无效输入处理:增加了对非y/n、非32/64输入的处理,让函数更健壮,避免因为用户误输入导致流程中断。
- 变量分离:架构选择用了
arch_opt变量,和之前的opt分开,避免变量复用可能带来的逻辑混乱。
内容的提问来源于stack exchange,提问作者Rawstring
相关产品推荐
相关产品推荐

