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

}