1.以read输入数字为核心实现交互选择功能
#!/bin/bash
# 定义颜色变量
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[0;33m'
NC='\033[0m' # No Color
# 检查是否以root身份运行
if [[ $EUID -ne 0 ]]; then
echo -e "${RED}请以root权限运行此脚本!${NC}"
exit 1
fi
# 函数:安装FTP服务
install_ftp_service() {
echo -e "${GREEN}开始安装vsftpd...${NC}"
apt-get update
apt-get install -y vsftpd
echo -e "${GREEN}vsftpd安装完成!${NC}"
}
# 函数:开启FTP服务
start_ftp_service() {
systemctl enable vsftpd
systemctl start vsftpd
echo -e "${GREEN}FTP服务已开启。${NC}"
}
# 函数:关闭FTP服务
stop_ftp_service() {
systemctl stop vsftpd
systemctl disable vsftpd
echo -e "${GREEN}FTP服务已关闭。${NC}"
}
# 函数:切换匿名登录
toggle_anonymous_login() {
local anon_status=$(grep "^anonymous_enable=YES" /etc/vsftpd.conf)
if [[ -z "$anon_status" ]]; then
sed -i 's/^anonymous_enable=NO/anonymous_enable=YES/' /etc/vsftpd.conf
echo -e "${GREEN}匿名登录已启用。${NC}"
else
sed -i 's/^anonymous_enable=YES/anonymous_enable=NO/' /etc/vsftpd.conf
echo -e "${GREEN}匿名登录已禁用。${NC}"
fi
systemctl restart vsftpd
}
# 主菜单
main_menu() {
while true; do
clear
echo -e "${YELLOW}FTP服务管理菜单${NC}"
echo "1. 安装FTP服务"
echo "2. 开启FTP服务"
echo "3. 关闭FTP服务"
echo "4. 切换匿名登录"
echo "5. 退出"
read -p "请选择一个选项: " choice
case $choice in
1)
install_ftp_service
;;
2)
start_ftp_service
;;
3)
stop_ftp_service
;;
4)
toggle_anonymous_login
;;
5)
echo -e "${GREEN}退出脚本。${NC}"
exit 0
;;
*)
echo -e "${RED}无效的选择,请重新输入。${NC}"
;;
esac
read -p "按任意键继续..."
done
}
# 脚本入口
main_menu
2.以read输入方向键为核心实现交互选择功能
#思路:
. 功能文件 #注入函数
while :
do
菜单界面功能函数
read -n 3 c #将上下左右或enter存储为变量c
if 控制高亮行数(选择)
elif 选择功能
fi
done
实现案例
#菜单主文件
#!/bin/bash
. menu #读入菜单函数
. ftp_install #读入安装函数
. ser_manager #读入服务管理函数
while :
do
menu
echo "$msg"
read -n 3 c #-n 3是输入足够3个字符就自动进行下一步,c是存储字符的变量
if [ "$c" == $'\033[A' ];then #如果按了 "上" 键
[ $x -eq 1 ] && continue #根据变量x定义高亮行,在第1行就没变化
let x-- #如果不在第1行,就把x-1
elif [ "$c" == $'\033[B' ];then #如果按了 "下" 键
[ $x -eq 3 ] && continue #如果在第3行,没变化
let x++ #如果不在第3行,就把x+1
elif [ -z $c ] && [ $x -eq 1 ];then #如果在第1行回车就执行下列任务
msg="ftp服务安装中。。。"
echo "$msg"
ftp_install #执行ftp_install函数的任务
elif [ -z $c ] && [ $x -eq 2 ];then #如果在第2行回车就执行下列任务
ss -ntulp | grep -q vsftpd && ser_manager stop || ser_manager start
elif [ -z $c ] && [ $x -eq 3 ];then #如果在第3行回车就执行下列任务
exit
fi
done
#菜单界面函数
vim menu #创建菜单函数文件
x=1 #高亮行号,默认为1即可
y=0 #第几行
menu (){ #循环显示菜单的函数
clear
for i in 1,安装ftp服务 2,开关ftp服务 3,退出
do
echo "----------------"
let y++
[ $x -eq $y ] && echo -e "\033[43;93m$i\033[0m" && continue
echo "$i"
done
y=0
echo "----------------"
}
#菜单功能函数
vim ser_manager #创建服务管理函数文件
ser_manager(){
if ! rpm -q vsftpd &>/dev/null ;then #ftp如果未安装则条件算成功,!是取反
msg="未安装vsftpd软件包"
return #结束函数任务,跳出函数
fi
case $1 in
start) #调用本函数后追加start就是把服务开启
systemctl start vsftpd
msg="ftp服务已经启动";;
stop) #调用本函数后追加stop就是把服务关闭
systemctl stop vsftpd
msg="ftp服务已经关闭";;
esac
}