Shell 实现多级菜单脚本编写
Shell 实现多级菜单脚本编写
1. 基本思路
- 多级菜单脚本用于交互式选择,实现主菜单、二级菜单和操作菜单的分级展示。
- 脚本本身不涉及实际安装操作,便于后续集成真实的安装命令。
2. 优化建议
2.1 结构化设计
- 主菜单与二级菜单采用循环结构,便于反复选择与返回。
- 每一级菜单均采用函数封装,增强代码可读性和可维护性。
2.2 输入校验
- 提取通用输入校验函数,减少重复代码。
- 校验输入是否为数字、是否在合法范围内,并给出友好提示。
2.3 交互体验
- 菜单清屏(
clear
)让界面美观。 - 菜单选项使用颜色高亮,区分不同级别和内容。
- 操作后添加“按回车继续”提示,避免信息闪退,提升友好性。
- 返回上一级菜单用
break
跳出循环。
2.4 易于扩展
- 菜单项和执行操作分开,后续可直接替换为实际安装命令。
- 二级菜单可灵活增加新功能,只需增添菜单项和case分支。
创建shell文件
[root@serervera ~]# vim /usr/bin/caidan.sh
脚本代码
#!/bin/bash# 一级菜单函数function menu() {clearecho "----------------------------------------------"echo "|******* Please Enter Your Choice:[1-3] ******|"echo "----------------------------------------------"echo -e "\033[35m 1) LAMP 菜单\033[0m"echo -e "\033[35m 2) LNMP 菜单\033[0m"echo -e "\033[35m 3) 退出\033[0m"
}# 通用输入校验函数function check_input() {local input=$1local min=$2local max=$3if ! [[ $input =~ ^[0-9]+$ ]]; thenecho "输入错误,请输入数字 [$min-$max]"sleep 1return 1fiif [ $input -lt $min ] || [ $input -gt $max ]; thenecho "超出范围,请输入 [$min-$max]"sleep 1return 1fireturn 0
}# LAMP 二级菜单function lamp_menu() {while true; doclearecho "----------------------------------------------"echo "|*********** LAMP 菜单 [1-4] ***************|"echo "----------------------------------------------"echo -e "\033[36m 1) 安装 httpd\033[0m"echo -e "\033[36m 2) 安装 mysql\033[0m"echo -e "\033[36m 3) 安装 php\033[0m"echo -e "\033[36m 4) 返回上一级菜单\033[0m"read -p "请选择操作 [1-4]:" num2check_input $num2 1 4 || continuecase $num2 in1) echo "模拟安装 httpd..."; sleep 1;;2) echo "模拟安装 mysql..."; sleep 1;;3) echo "模拟安装 php..."; sleep 1;;4) break;;esac[ $num2 -ne 4 ] && read -p "按回车键继续..." done
}# LNMP 二级菜单function lnmp_menu() {while true; doclearecho "----------------------------------------------"echo "|*********** LNMP 菜单 [1-4] ***************|"echo "----------------------------------------------"echo -e "\033[36m 1) 安装 nginx\033[0m"echo -e "\033[36m 2) 安装 mysql\033[0m"echo -e "\033[36m 3) 安装 php\033[0m"echo -e "\033[36m 4) 返回上一级菜单\033[0m"read -p "请选择操作 [1-4]:" num3check_input $num3 1 4 || continuecase $num3 in1) echo "模拟安装 nginx..."; sleep 1;;2) echo "模拟安装 mysql..."; sleep 1;;3) echo "模拟安装 php..."; sleep 1;;4) break;;esac[ $num3 -ne 4 ] && read -p "按回车键继续..." done
}# 主程序while true; domenuread -p "请选择主菜单 [1-3]:" num1check_input $num1 1 3 || continuecase $num1 in1) lamp_menu;;2) lnmp_menu;;3) echo "谢谢使用,再见!"; exit 0;;esac
done
----------------------------------------------
|******* Please Enter Your Choice:[1-3] ******|
----------------------------------------------1) LAMP 菜单2) LNMP 菜单3) 退出
请选择主菜单 [1-3]:
例如进入LAMP菜单,实现一键安装httpd,mysql,php
|*********** LAMP 菜单 [1-4] ***************|
----------------------------------------------1) 安装 httpd2) 安装 mysql3) 安装 php4) 返回上一级菜单
请选择操作 [1-4]:
- 总结
- 多级菜单脚本结构清晰,交互友好,易于维护和扩展。
- 适合任何需要分层操作的Shell脚本场景。
- 安装 httpd
- 安装 mysql
- 安装 php
- 返回上一级菜单
请选择操作 [1-4]:
4. 总结- **多级菜单脚本结构清晰,交互友好,易于维护和扩展。**
- **适合任何需要分层操作的Shell脚本场景。**
- **后续可将模拟操作替换为实际部署命令,直接用于生产。**