当前位置: 首页 > news >正文

Shell 实现多级菜单脚本编写

Shell 实现多级菜单脚本编写

1. 基本思路

  • 多级菜单脚本用于交互式选择,实现主菜单、二级菜单和操作菜单的分级展示。
  • 脚本本身不涉及实际安装操作,便于后续集成真实的安装命令。

2. 优化建议

2.1 结构化设计

  • 主菜单与二级菜单采用循环结构,便于反复选择与返回。
  • 每一级菜单均采用函数封装,增强代码可读性和可维护性。

2.2 输入校验

  • 提取通用输入校验函数,减少重复代码。
  • 校验输入是否为数字、是否在合法范围内,并给出友好提示。

2.3 交互体验

  • 菜单清屏(clear)让界面美观。
  • 菜单选项使用颜色高亮,区分不同级别和内容。
  • 操作后添加“按回车继续”提示,避免信息闪退,提升友好性。
  • 返回上一级菜单用break跳出循环。

2.4 易于扩展

  • 菜单项和执行操作分开,后续可直接替换为实际安装命令。
  • 二级菜单可灵活增加新功能,只需增添菜单项和case分支。

创建shell文件

[root@serervera ~]# vim /usr/bin/caidan.sh

image-20250812221051716

脚本代码

#!/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

image-20250812221106729

----------------------------------------------
|******* Please Enter Your Choice:[1-3] ******|
----------------------------------------------1) LAMP 菜单2) LNMP 菜单3) 退出
请选择主菜单 [1-3]:

image-20250812221141665

例如进入LAMP菜单,实现一键安装httpd,mysql,php

|*********** LAMP 菜单 [1-4] ***************|
----------------------------------------------1) 安装 httpd2) 安装 mysql3) 安装 php4) 返回上一级菜单
请选择操作 [1-4]:
  1. 总结
  • 多级菜单脚本结构清晰,交互友好,易于维护和扩展。
  • 适合任何需要分层操作的Shell脚本场景。

  1. 安装 httpd
  2. 安装 mysql
  3. 安装 php
  4. 返回上一级菜单
    请选择操作 [1-4]:
4. 总结- **多级菜单脚本结构清晰,交互友好,易于维护和扩展。**
- **适合任何需要分层操作的Shell脚本场景。**
- **后续可将模拟操作替换为实际部署命令,直接用于生产。**
http://www.lryc.cn/news/618746.html

相关文章:

  • 每日一练:将一个数字表示成幂的和的方案数;动态规划、深度优先搜索
  • WireShark:非常好用的网络抓包工具
  • AI重构Java开发:飞算JavaAI如何实现效率与质量的双重突破?
  • 晶片与电路板的桥梁-封装
  • Windows server服务器上部署python项目域名访问(超详细教程)
  • Day13 Vue工程化
  • 医疗智慧大屏系统 - Flask + Vue实现
  • Spring框架如何解决循环依赖
  • vue3 两种方法实现 按钮级别权限控制
  • vue3中el-upload使用http-request方式自定义上传文件
  • 支持任意 MCP 协议的客户端
  • Redis面试题及详细答案100道(16-32) --- 数据类型事务管道篇
  • 一,设计模式-单例模式
  • 2025年中科院2区红杉优化算法Sequoia Optimization Algorithm-附Matlab免费代码
  • VBS 字符串处理
  • 腾讯云服务器账户转移操作详解
  • Ceph存储池参数中pg_num和pgp_num的关系
  • 【Docker项目实战】使用Docker部署Vikunja任务管理工具
  • 熟悉并使用Spring框架 - XML篇
  • 破译真实感:渲染参数进阶指南——告别塑料感,唤醒材质生命力
  • 98、【OS】【Nuttx】【构建】cmake 配置问题定位:menuconfig.dir/build.make
  • 【力扣494】目标和
  • 笔试——Day36
  • Unity-VR插件AutoHand
  • Day 10-2: Mini-GPT完整手写实战 - 从组件组装到文本生成的端到端实现
  • 武汉火影数字|VR红色文化馆打造 沉浸式体验红色文化
  • Coze开源 Agent 的“乐高时代”
  • 【19】万集科技——万集科技嵌入式,校招 一面,二面,面试问答记录
  • Java 编程每日一题:实现一个简易的 LRU 缓存
  • 站在Vue的角度,对比鸿蒙开发中的递归渲染