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

《Shell脚本实战:打造交互式多级菜单与LAMP/LNMP环境配置指南》

Shell项目实践—多级菜单脚本编写


1. 脚本的解释

1.1 脚本概述
  • 这是一个用Bash编写的多级菜单脚本;
  • 主要用于演示LAMP和LNMP环境的安装流程;
  • 实际不执行安装操作,但可以轻松修改为真实安装脚本。
1.2 主要功能模块
function menu()       # 主菜单函数function lamp_menu()   # LAMP安装子菜单function lnmp_menu()   # LNMP安装子菜单
1.3 工作流程
  • 脚本启动后显示主菜单,提供4个选项:
      1. LAMP安装 (Apache+MySQL+PHP)
      1. LNMP安装 (Nginx+MySQL+PHP)
      1. 退出
      1. 返回主菜单
1.4 输入验证机制
  • 使用expr $num + 1验证输入是否为整数
  • 检查数字是否在有效范围内(1-4)
  • 无效输入会显示警告并重新显示菜单
1.5 安装模拟功能
  • 使用yum install命令模拟软件包安装
  • 安装结果通过$?检查
  • 成功安装后显示中文提示信息
1.6 界面设计
  • 使用echo -e "\033[35m"实现紫色文本
  • 使用clear命令保持界面整洁
  • 菜单结构清晰,使用分隔线增强可读性
1.7 递归菜单控制
  • 主循环使用while true实现持续运行
  • 通过break语句退出脚本
  • 子菜单通过递归调用实现

2. 脚本内容

2.1 代码如下
#!/bin/bash
#####################################################################
# File Name: multi_menu.sh
# Version: V1.0
# Author: Cyber4K
# Email: 19829102887@163.com
# Organization: https://blog.csdn.net/2302_81635282
# Created Time : 2025-05-25 19:26:00
# Description:
1. 本脚本主要实现多级菜单效果,并没有安装LAMP,LNMP环境。
2. 如果要用在实际生产环境中部署LNMP,LNMP环境,只需要简单修改一下即可。
#####################################################################
function menu(){
cat << EOF
----------------------------------------------
|*******Please Enter Your Choice:[1-4]*******|
----------------------------------------------
*   `echo -e "\033[35m 1)lamp install\033[0m"`
*   `echo -e "\033[35m 2)lnmp install\033[0m"`
*   `echo -e "\033[35m 3)quit\033[0m"`
*   `echo -e "\033[35m 4)return main menu\033[0m"`
EOF
}function lamp_menu(){
cat << EOF
----------------------------------------------
|*******Please Enter Your Choice:[1-4]*******|
----------------------------------------------
*   `echo -e "\033[35m 1)http install\033[0m"`
*   `echo -e "\033[35m 2)mysql install\033[0m"`
*   `echo -e "\033[35m 3)php install\033[0m"`
*   `echo -e "\033[35m 4)return main menu\033[0m"`
EOF
read -p "####please input second_lamp optios[1-4]: " num2
expr $num2 + 1 &>/dev/null  #这里加1,判断输入的是不是整数。
if [ $? -ne 0 ]
then    #如果不等于零,代表输入不是整数。echo "###########################"echo "Waing !!!,input error   "echo "Please enter choose[1-4]:"echo "##########################"sleep 1
elseif [ $num2 -gt 4 ]thenecho "###########################"echo "Waing !!!,Out of range   "echo "Please enter choose[1-4]:"echo "##########################"sleep 1fi
fi
case $num2 in1)yum  install  httpd  -y  &>  /dev/nullif(($?==0))thenecho  "安装httpd成功"fisleep 2lamp_menu;;2)yum install mysql -y &> /dev/nullif(($?==0))thenecho  "安装mysql成功"fisleep 2lamp_menu;;3)yum install php* -y &> /dev/nullif(($?==0))thenecho  "安装php成功"fisleep 2lamp_menu;;4)clearmenu;;*)clearecho echo -e "\033[31mYour Enter the wrong,Please input again Choice:[1-4]\033[0m"lamp_menu
esac
}function lnmp_menu(){
cat << EOF
----------------------------------------------
|*******Please Enter Your Choice:[1-4]*******|
----------------------------------------------
*   `echo -e "\033[35m 1)nginx install\033[0m"`
*   `echo -e "\033[35m 2)mysql install\033[0m"`
*   `echo -e "\033[35m 3)php install\033[0m"`
*   `echo -e "\033[35m 4)return main menu\033[0m"`
EOF
read -p "please input second_lnmp options[1-4]: " num3
expr $num3 + 1 &>/dev/null  #这里加1,判断输入的是不是整数。
if [ $? -ne 0 ]
then  #如果不等于零,代表输入不是整数。echo "###########################"echo "Waing !!!,input error   "echo "Please enter choose[1-4]:"echo "##########################"sleep 1
elseif [ $num3 -gt 4 ]thenecho "###########################"echo "Waing !!!,Out of range   "echo "Please enter choose[1-4]:"echo "##########################"sleep 1fi 
fi
case $num3 in1)yum install nginx -y &> /dev/nullif(($?==0))thenecho  "安装nginx成功"fisleep 2lnmp_menu;;2)yum install mysql -y &> /dev/nullif(($?==0))thenecho  "安装mysql成功"fisleep 2clearlnmp_menu;;3)yum install php -y &> /dev/nullif(($?==0))thenecho  "安装php成功"fisleep 2clearlnmp_menu;;4)clearmenu;;*)clearechoecho -e "\033[31mYour Enter the wrong,Please input again Choice:[1-4]\033[0m"lnmp_menu
esac
}clear
menu
while true 
doread -p "##please Enter Your first_menu Choice:[1-4] " num1expr $num1 + 1 &>/dev/null   #这里加1,判断输入的是不是整数。if [ $? -ne 0 ]then   #如果不等于零,代表输入不是整数。echo "----------------------------"echo "|      Waring!!!           |"echo "|Please Enter Right Choice!|"echo "----------------------------"sleep 1elif [ $num1 -gt 4 ]then # 输入数字超范围echo "----------------------------"echo "|      Waring!!!           |"echo "|    Out of range!         |"echo "----------------------------"sleep 1elsecase $num1 in1)clearlamp_menu;;2)clearlnmp_menu;;3)clearbreak;;4)clearmenu;;*)clearecho -e "\033[31mYour Enter a number Error,Please Enter again Choice:[1-4]: \033[0m"       menuesacfi
done
2.2 界面演示如下
2.2.1 主界面

image-20250525202552517

2.2.2 LAMP界面

image-20250525203803989

2.2.3 LNMP界面image-20250525203821874
http://www.xdnf.cn/news/8676.html

相关文章:

  • python学习day28
  • 博图SCL星三角降压启动从安装到编程步骤详解
  • libreoffice容器word转pdf
  • Word转PDF--自动生成目录
  • 教师技术知识对人工智能赋能下教学效果的影响:以教学创新为中介的实证研究
  • java每日精进 5.25【Redis缓存】
  • 一文讲透golang channel 的特点、原理及使用场景
  • Linux相关概念和易错知识点(41)(UDP、TCP报头结构)
  • 识别速度快且精准的OCR工具
  • 【短距离通信】【WiFi】WiFi7起源和应用场景介绍
  • 中间件安全IISApacheTomcatNginx弱口令不安全配置CVE
  • 梯度下降 损失景观 视频截图
  • 【 java 基础问题 第一篇 】
  • 【MySQL】第9节|Innodb底层原理与Mysql日志机制深入剖析(二)
  • Audio Codec的I2S时序或PCM时序,代表什么意思
  • 使用Chrome waterfall 查看接口耗时
  • openssl-1.1.1w-win64
  • ISO 26262-5 评估硬件随机失效率
  • redis功能清单
  • 记录一次功能优化需求下的业务处理思路整理
  • 【LangChain大模型应用与多智能体开发 ② 接入智谱AI】
  • 特殊类设计
  • 【打卡】树状数组的操作
  • JDK21深度解密 Day 4:虚拟线程底层实现原理
  • 软件名称:系统日志监听工具 v1.0
  • 环境配置文档撰写指南
  • ​​支持多客户网站的SMPP网关完整实现方案​
  • vocabulary in program
  • C++ STL
  • Seismic source model - stochastic kinematic model (kappa-inverse-square)