《Shell脚本实战:打造交互式多级菜单与LAMP/LNMP环境配置指南》
本文介绍了一个交互式多级菜单Shell脚本,用于演示LAMP/LNMP环境配置流程。脚本包含主菜单和子菜单功能,提供1-4号选项选择,支持LAMP(Apache+MySQL+PHP)和LNMP(Nginx+MySQL+PHP)环境的模拟安装。脚本实现了输入验证、递归菜单控制和界面美化等功能,采用紫色文本和分隔线增强可读性,通过yum命令模拟软件安装并显示中文提示。该脚本虽为演示用途,但可轻松修改为
·
Shell项目实践—多级菜单脚本编写
1. 脚本的解释
1.1 脚本概述
- 这是一个用Bash编写的多级菜单脚本;
- 主要用于演示LAMP和LNMP环境的安装流程;
- 实际不执行安装操作,但可以轻松修改为真实安装脚本。
1.2 主要功能模块
function menu() # 主菜单函数
function lamp_menu() # LAMP安装子菜单
function lnmp_menu() # LNMP安装子菜单
1.3 工作流程
- 脚本启动后显示主菜单,提供4个选项:
-
- LAMP安装 (Apache+MySQL+PHP)
-
- LNMP安装 (Nginx+MySQL+PHP)
-
- 退出
-
- 返回主菜单
-
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
else
if [ $num2 -gt 4 ]
then
echo "###########################"
echo "Waing !!!,Out of range "
echo "Please enter choose[1-4]:"
echo "##########################"
sleep 1
fi
fi
case $num2 in
1)
yum install httpd -y &> /dev/null
if(($?==0))
then
echo "安装httpd成功"
fi
sleep 2
lamp_menu
;;
2)
yum install mysql -y &> /dev/null
if(($?==0))
then
echo "安装mysql成功"
fi
sleep 2
lamp_menu
;;
3)
yum install php* -y &> /dev/null
if(($?==0))
then
echo "安装php成功"
fi
sleep 2
lamp_menu
;;
4)
clear
menu
;;
*)
clear
echo
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
else
if [ $num3 -gt 4 ]
then
echo "###########################"
echo "Waing !!!,Out of range "
echo "Please enter choose[1-4]:"
echo "##########################"
sleep 1
fi
fi
case $num3 in
1)
yum install nginx -y &> /dev/null
if(($?==0))
then
echo "安装nginx成功"
fi
sleep 2
lnmp_menu
;;
2)
yum install mysql -y &> /dev/null
if(($?==0))
then
echo "安装mysql成功"
fi
sleep 2
clear
lnmp_menu
;;
3)
yum install php -y &> /dev/null
if(($?==0))
then
echo "安装php成功"
fi
sleep 2
clear
lnmp_menu
;;
4)
clear
menu
;;
*)
clear
echo
echo -e "\033[31mYour Enter the wrong,Please input again Choice:[1-4]\033[0m"
lnmp_menu
esac
}
clear
menu
while true
do
read -p "##please Enter Your first_menu Choice:[1-4] " num1
expr $num1 + 1 &>/dev/null #这里加1,判断输入的是不是整数。
if [ $? -ne 0 ]
then #如果不等于零,代表输入不是整数。
echo "----------------------------"
echo "| Waring!!! |"
echo "|Please Enter Right Choice!|"
echo "----------------------------"
sleep 1
elif [ $num1 -gt 4 ]
then # 输入数字超范围
echo "----------------------------"
echo "| Waring!!! |"
echo "| Out of range! |"
echo "----------------------------"
sleep 1
else
case $num1 in
1)
clear
lamp_menu
;;
2)
clear
lnmp_menu
;;
3)
clear
break
;;
4)
clear
menu
;;
*)
clear
echo -e "\033[31mYour Enter a number Error,Please Enter again Choice:[1-4]: \033[0m"
menu
esac
fi
done
2.2 界面演示如下
2.2.1 主界面

2.2.2 LAMP界面

2.2.3 LNMP界面
魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。
更多推荐


所有评论(0)