如何在Shell脚本中创建带1-5数字范围限制的菜单(禁用CASE语句)
嘿,这个需求完全可以实现!不用case语句的话,咱们靠while循环配合if-elif条件判断就能搞定强制输入范围的菜单,而且逻辑清晰易懂。我直接给你写个完整的示例脚本,再拆解关键部分:
无CASE语句的Shell菜单实现(强制1-5输入)
下面是完整的脚本代码,你可以直接拿去测试:
#!/bin/bash # 无限循环,直到用户输入合法选项 while true; do # 打印菜单内容 echo "请选择以下选项:" echo "1. 选项一" echo "2. 选项二" echo "3. 选项三" echo "4. 选项四" echo "5. 退出脚本" # 获取用户输入 read -p "请输入1-5之间的数字:" user_input # 第一步:验证输入是否为纯数字 if ! [[ $user_input =~ ^[0-9]+$ ]]; then echo "⚠️ 错误:请输入有效的数字!" echo "-------------------------" continue fi # 第二步:验证数字是否在1-5范围内 if (( user_input < 1 || user_input > 5 )); then echo "⚠️ 错误:请输入1-5之间的数字!" echo "-------------------------" continue fi # 第三步:用if-elif处理各个选项逻辑 if (( user_input == 1 )); then echo "你选择了选项一,执行对应操作..." # 这里写选项一的具体逻辑 elif (( user_input == 2 )); then echo "你选择了选项二,执行对应操作..." # 这里写选项二的具体逻辑 elif (( user_input == 3 )); then echo "你选择了选项三,执行对应操作..." # 这里写选项三的具体逻辑 elif (( user_input == 4 )); then echo "你选择了选项四,执行对应操作..." # 这里写选项四的具体逻辑 elif (( user_input == 5 )); then echo "脚本即将退出,再见!" exit 0 # 退出脚本 fi # 如果需要执行完选项后回到菜单,就留空;如果要退出,就在对应选项加exit echo "-------------------------" done
关键逻辑拆解
- 无限循环控制:用
while true让菜单持续显示,直到用户选择退出选项(或者你可以在其他选项里加break来终止循环)。 - 输入合法性验证:
- 先用正则表达式
^[0-9]+$判断输入是否是纯数字,避免用户输入字母、符号等无效内容。 - 再用
(( ... ))的算术判断,检查数字是否在1-5区间内,不符合就提示错误并continue回到循环开头。
- 先用正则表达式
- 替代CASE的逻辑处理:用
if-elif依次匹配每个选项,完全可以替代case的功能,而且逻辑直观。
小提示
- 如果希望用户执行完某个选项后不退出,而是回到菜单,就保持当前的循环逻辑即可。
- 如果需要给菜单加颜色或者更美观的格式,可以在
echo里加ANSI转义码,比如echo -e "\033[32m请选择以下选项:\033[0m"(绿色字体)。
内容的提问来源于stack exchange,提问作者VinAlencc
相关产品推荐
相关产品推荐

