Bash脚本中用户输入与给定选项不匹配时如何输出错误提示
问题根因
- 首先是条件判断逻辑错误:你当前用的
||(或)逻辑永远为真:如果输入是<option a>,那它满足!= "<option b>"的条件,整个或判断就会触发;如果输入是<option b>,就满足!= "<option a>",同样会触发。你需要把||改成&&(且),才是表示「既不等于a也不等于b」的合法判断。 - 其次是逻辑顺序问题:你需要保证每次循环先读取最新的用户输入,再走分支判断,不要复用旧的
answer变量值,避免上一次输入的结果影响本次判断。
修正后的参考代码
#!/bin/bash answer="" until [[ "${answer}" = "exit" ]] do # 每次循环先读取用户最新输入 read -p "请输入选项: " answer # 匹配对应分支 if [[ "${answer}" = "<option a>" ]] then # 这里放你原来的<option a>对应的业务逻辑 echo "你选择了选项a" elif [[ "${answer}" = "<option b>" ]] then # 这里放你原来的<option b>对应的业务逻辑 echo "你选择了选项b" elif [[ "${answer}" = "exit" ]] then echo "退出程序" else # 所有合法选项都没命中时才提示错误 echo "Invalid input" fi done
可选优化建议
如果你的选项后续会增加,可以用case语句替代多个if判断,可读性更高:
#!/bin/bash answer="" until [[ "${answer}" = "exit" ]] do read -p "请输入选项: " answer case "${answer}" in "<option a>") echo "选项a的逻辑" ;; "<option b>") echo "选项b的逻辑" ;; "exit") echo "退出" ;; *) echo "Invalid input" ;; esac done
内容的提问来源于stack exchange,提问作者Gpeffer
相关产品推荐
相关产品推荐

