#!/bin/bash
VERSION="2025-03-21 v1.2.3"  # 只需定义一次版本号
SCRIPT_URL="https://raw.githubusercontent.com/everett7623/vps_scripts/main/vps.sh"
VERSION_URL="https://raw.githubusercontent.com/everett7623/vps_scripts/main/update_log.sh"

# 定义颜色
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
BLUE='\033[1;34m'
PURPLE='\033[0;35m'
WHITE='\033[1;37m'
NC='\033[0m' # No Color

# 定义渐变颜色数组
colors=(
    '\033[38;2;0;255;0m'    # 绿色
    '\033[38;2;64;255;0m'
    '\033[38;2;128;255;0m'
    '\033[38;2;192;255;0m'
    '\033[38;2;255;255;0m'  # 黄色
)

# 检查 root 权限并获取 sudo 权限
if [ "$(id -u)" != "0" ]; then
    echo "此脚本需要 root 权限运行。"
    if ! sudo -v; then
        echo "无法获取 sudo 权限,退出脚本。"
        exit 1
    fi
    echo "已获取 sudo 权限。"
fi

# 更新脚本
update_scripts() {
    echo -e "${YELLOW}正在检查更新...${NC}"
    
    local REMOTE_VERSION=$(curl -s -m 10 $VERSION_URL)
    if [ -z "$REMOTE_VERSION" ]; then
        echo -e "${RED}无法获取远程版本信息。请检查您的网络连接。${NC}"
        return 1
    fi
    
    if [ "$REMOTE_VERSION" != "$VERSION" ]; then
        echo -e "${BLUE}发现新版本 $REMOTE_VERSION,当前版本 $VERSION${NC}"
        echo -e "${BLUE}正在更新...${NC}"
        
        if curl -s -m 30 -o /tmp/vps.sh $SCRIPT_URL; then
            if [ ! -s /tmp/vps.sh ]; then
                echo -e "${RED}下载的脚本文件为空。更新失败。${NC}"
                return 1
            fi
            
            local NEW_VERSION=$(grep '^VERSION=' /tmp/vps.sh | cut -d'"' -f2)
            if [ -z "$NEW_VERSION" ]; then
                echo -e "${RED}无法从下载的脚本中获取版本信息。更新失败。${NC}"
                return 1
            fi
            
            if ! sed -i "s/^VERSION=.*/VERSION=\"$NEW_VERSION\"/" "$0"; then
                echo -e "${RED}无法更新脚本中的版本号。请检查文件权限。${NC}"
                return 1
            fi
            
            if mv /tmp/vps.sh "$0"; then
                chmod +x "$0"
                echo -e "${GREEN}脚本更新成功!新版本: $NEW_VERSION${NC}"
                echo -e "${YELLOW}请等待 3 秒...${NC}"
                sleep 3
                echo -e "${YELLOW}是否重新启动脚本以应用更新?(Y/n)${NC}"
                read -n 1 -r
                echo
                if [[ $REPLY =~ ^[Yy]$ ]] || [[ -z $REPLY ]]; then
                    exec bash "$0"
                else
                    echo -e "${YELLOW}请手动重启脚本以应用更新。${NC}"
                fi
            else
                echo -e "${RED}无法替换脚本文件。请检查权限。${NC}"
                return 1
            fi
        else
            echo -e "${RED}下载新版本失败。请稍后重试。${NC}"
            return 1
        fi
    else
        echo -e "${GREEN}脚本已是最新版本 $VERSION。${NC}"
    fi
}

# 检测操作系统
detect_os() {
    if [ -f /etc/os-release ]; then
        . /etc/os-release
        os_type=$ID
    elif type lsb_release >/dev/null 2>&1; then
        os_type=$(lsb_release -si)
    elif [ -f /etc/lsb-release ]; then
        . /etc/lsb-release
        os_type=$DISTRIB_ID
    elif [ -f /etc/debian_version ]; then
        os_type="debian"
    elif [ -f /etc/fedora-release ]; then
        os_type="fedora"
    elif [ -f /etc/centos-release ]; then
        os_type="centos"
    elif [ -f /etc/redhat-release ]; then
        os_type="redhat"
    else
        os_type=$(uname -s)
    fi
    os_type=$(echo $os_type | tr '[:upper:]' '[:lower:]')
    echo "检测到的操作系统: $os_type"
}

# 更新系统
update_system() {
    detect_os
    case "${os_type,,}" in
        ubuntu|debian|linuxmint|elementary|pop)
            update_cmd="apt-get update"
            upgrade_cmd="apt-get upgrade -y"
            clean_cmd="apt-get autoremove -y"
            ;;
        centos|rhel|fedora|rocky|almalinux|openeuler)
            if command -v dnf &>/dev/null; then
                update_cmd="dnf check-update"
                upgrade_cmd="dnf upgrade -y"
                clean_cmd="dnf autoremove -y"
            else
                update_cmd="yum check-update"
                upgrade_cmd="yum upgrade -y"
                clean_cmd="yum autoremove -y"
            fi
            ;;
        arch|manjaro)
            update_cmd="pacman -Sy"
            upgrade_cmd="pacman -Syu --noconfirm"
            clean_cmd="pacman -Sc --noconfirm"
            ;;
        *)
            echo -e "${RED}不支持的 Linux 发行版: $os_type${NC}"
            return 1
            ;;
    esac
    sudo $update_cmd
    if [ $? -eq 0 ]; then
        sudo $upgrade_cmd
        if [ $? -eq 0 ]; then
            sudo $clean_cmd
            echo -e "${GREEN}系统更新完成。${NC}"
        else
            echo -e "${RED}升级失败。${NC}"
            return 1
        fi
    else
        echo -e "${RED}更新失败。${NC}"
        return 1
    fi
}

# 定义支持的操作系统类型
SUPPORTED_OS=("ubuntu" "debian" "linuxmint" "elementary" "pop" "centos" "rhel" "fedora" "rocky" "almalinux" "openeuler" "opensuse" "sles" "arch" "manjaro" "alpine" "gentoo" "cloudlinux")

# 安装依赖
install_dependencies() {
    echo -e "${YELLOW}正在检查并安装必要的依赖项...${NC}"
    
    # 确保 os_type 已定义
    if [ -z "$os_type" ]; then
        detect_os
    fi

    # 定义安装命令
    case "${os_type,,}" in
        ubuntu|debian|linuxmint|elementary|pop)
            install_cmd="apt-get install -y"
            ;;
        centos|rhel|fedora|rocky|almalinux|openeuler)
            install_cmd="yum install -y"
            ;;
        opensuse*|sles)
            install_cmd="zypper install -y"
            ;;
        arch|manjaro)
            install_cmd="pacman -S --noconfirm"
            ;;
        alpine)
            install_cmd="apk add"
            ;;
        gentoo)
            install_cmd="emerge"
            ;;
        cloudlinux)
            install_cmd="yum install -y"
            ;;
        *)
            echo -e "${RED}不支持的 Linux 发行版: $os_type${NC}"
            return 1
            ;;
    esac
    
    # 安装 curl
    if ! command -v curl &> /dev/null; then
        echo -e "${YELLOW}正在安装 curl...${NC}"
        if ! sudo $install_cmd curl; then
            echo -e "${RED}无法安装 curl。请手动安装此依赖项。${NC}"
            return 1
        fi
    else
        echo -e "${GREEN}curl 已安装。${NC}"
    fi
    
    echo -e "${GREEN}依赖项检查和安装完成。${NC}"
}

# 检查并安装依赖
install_dependencies

# 获取IP地址
ip_address() {
    ipv4_address=$(curl -s --max-time 5 ipv4.ip.sb)
    if [ -z "$ipv4_address" ]; then
        ipv4_address=$(ip -4 addr show | grep -oP '(?<=inet\s)\d+(\.\d+){3}' | grep -v '127.0.0.1' | head -n1)
    fi

    ipv6_address=$(curl -s --max-time 5 ipv6.ip.sb)
    if [ -z "$ipv6_address" ]; then
        ipv6_address=$(ip -6 addr show | grep -oP '(?<=inet6\s)[\da-f:]+' | grep -v '^::1' | grep -v '^fe80' | head -n1)
    fi
}

# 统计使用次数
sum_run_times() {
    local COUNT=$(wget --no-check-certificate -qO- --tries=2 --timeout=2 "https://hits.seeyoufarm.com/api/count/incr/badge.svg?url=https%3A%2F%2Fgithub.com%2Feverett7623%2Fvps_scripts%2Fblob%2Fmain%2Fvps.sh" 2>&1 | grep -m1 -oE "[0-9]+[ ]+/[ ]+[0-9]+")
    if [[ -n "$COUNT" ]]; then
        daily_count=$(cut -d " " -f1 <<< "$COUNT")
        total_count=$(cut -d " " -f3 <<< "$COUNT")
    else
        echo "Failed to fetch usage counts."
        daily_count=0
        total_count=0
    fi
}

# 调用函数获取统计数据
sum_run_times

#清理系统
clean_system() {
    case "$(uname -s)" in
        Linux)
            if command -v apt &>/dev/null; then
                apt autoremove --purge -y && apt clean -y && apt autoclean -y
                apt remove --purge $(dpkg -l | awk '/^rc/ {print $2}') -y
                journalctl --vacuum-time=1s
            elif command -v yum &>/dev/null; then
                yum autoremove -y && yum clean all
                journalctl --vacuum-time=1s
            fi
            ;;
        *)
            echo -e "${RED}暂不支持该操作系统的清理功能。${NC}"
            return 1
            ;;
    esac
    echo -e "${GREEN}系统清理完成。${NC}"
}

# 输出欢迎信息
show_welcome() {
    clear
    echo ""
    echo -e "${YELLOW}---------------------------------By'Jensfrank---------------------------------${NC}"
    echo ""
    echo "VPS脚本集合 $VERSION"
    echo "GitHub地址: https://github.com/everett7623/vps_scripts"
    echo "VPS选购: https://www.nodeloc.com/vps"
    echo ""
    echo -e "${colors[0]} #     # #####   #####       #####   #####  #####   ### #####  #####  #####  ${NC}"
    echo -e "${colors[1]} #     # #    # #     #     #     # #     # #    #   #  #    #   #   #     # ${NC}"
    echo -e "${colors[2]} #     # #    # #           #       #       #    #   #  #    #   #   #       ${NC}"
    echo -e "${colors[3]} #     # #####   #####       #####  #       #####    #  #####    #    #####  ${NC}"
    echo -e "${colors[4]}  #   #  #            #           # #       #   #    #  #        #         # ${NC}"
    echo -e "${colors[3]}   # #   #      #     #     #     # #     # #    #   #  #        #   #     # ${NC}"
    echo -e "${colors[2]}    #    #       #####       #####   #####  #     # ### #        #    #####  ${NC}"
    echo ""
    echo "支持Ubuntu/Debian"
    echo ""
    echo -e "今日运行次数: ${PURPLE}$daily_count${NC} 次,累计运行次数: ${PURPLE}$total_count${NC} 次"
    echo ""
    echo -e "${YELLOW}---------------------------------By'Jensfrank---------------------------------${NC}"
    echo ""
}

# 显示菜单
show_menu() {
  echo ""
  echo "------------------------------------------------------------------------------"
  echo -e "${YELLOW}1) 本机信息${NC}                        ${YELLOW}13) VPS一键脚本工具箱${NC}"
  echo -e "${YELLOW}2) 更新系统${NC}                        ${YELLOW}14) jcnf 常用脚本工具包${NC}"
  echo -e "${YELLOW}3) 清理系统${NC}                        ${YELLOW}15) 科技Lion脚本${NC}"
  echo -e "${YELLOW}4) Yabs${NC}                            ${YELLOW}16) BlueSkyXN脚本${NC}"
  echo -e "${YELLOW}5) 融合怪${NC}                          ${YELLOW}17) 勇哥Singbox${NC}"
  echo -e "${YELLOW}6) IP质量${NC}                          ${YELLOW}18) 勇哥X-UI${NC}"
  echo -e "${YELLOW}7) 流媒体解锁${NC}                      ${YELLOW}19) Fscarmen-Singbox${NC}"
  echo -e "${YELLOW}8) 响应测试${NC}                        ${YELLOW}20) 3X-UI${NC}"
  echo -e "${YELLOW}9) 三网测速(多/单线程)${NC}           ${YELLOW}21) 3X-UI优化版${NC}"
  echo -e "${YELLOW}10) AutoTrace三网回程路由${NC}          ${YELLOW}22) 安装Docker${NC}"
  echo -e "${YELLOW}11) 安装并启动iperf3服务端${NC}"
  echo -e "${YELLOW}12) 超售测试${NC}"
  echo "------------------------------------------------------------------------------"
  echo -e "${RED}66) NodeLoc聚合测试脚本${NC}"
  echo -e "${RED}77) XY网络质量体检脚本${NC}"
  echo -e "${YELLOW}88) 更新脚本${NC}"
  echo -e "${YELLOW}99) 卸载脚本${NC}"
  echo -e "${YELLOW}0) 退出${NC}"
  echo "------------------------------------------------------------------------------"
  read -p "请选择要执行的脚本: " choice
  
  case $choice in
      1)
      clear
      echo -e "${PURPLE}执行本机信息...${NC}"

      ip_address

      if [ "$(uname -m)" == "x86_64" ]; then
        cpu_info=$(cat /proc/cpuinfo | grep 'model name' | uniq | sed -e 's/model name[[:space:]]*: //')
      else
        cpu_info=$(lscpu | grep 'Model name' | sed -e 's/Model name[[:space:]]*: //')
      fi

      cpu_usage=$(top -bn1 | grep 'Cpu(s)' | awk '{print $2 + $4}')
      cpu_usage_percent=$(printf "%.2f" "$cpu_usage")%

      cpu_cores=$(nproc)

      mem_info=$(free -b | awk 'NR==2{printf "%.2f/%.2f MB (%.2f%%)", $3/1024/1024, $2/1024/1024, $3*100/$2}')

      disk_info=$(df -h | awk '$NF=="/"{printf "%d/%dGB (%s)", $3,$2,$5}')

      country=$(curl -s ipinfo.io/country)
      city=$(curl -s ipinfo.io/city)

      isp_info=$(curl -s ipinfo.io/org)

      cpu_arch=$(uname -m)

      hostname=$(hostname)

      kernel_version=$(uname -r)

      congestion_algorithm=$(sysctl -n net.ipv4.tcp_congestion_control)
      queue_algorithm=$(sysctl -n net.core.default_qdisc)

      # 尝试使用 lsb_release 获取系统信息
      os_info=$(lsb_release -ds 2>/dev/null)

      # 如果 lsb_release 命令失败,则尝试其他方法
      if [ -z "$os_info" ]; then
        # 检查常见的发行文件
        if [ -f "/etc/os-release" ]; then
          os_info=$(source /etc/os-release && echo "$PRETTY_NAME")
        elif [ -f "/etc/debian_version" ]; then
          os_info="Debian $(cat /etc/debian_version)"
        elif [ -f "/etc/redhat-release" ]; then
          os_info=$(cat /etc/redhat-release)
        else
          os_info="Unknown"
        fi
      fi

      clear
      output=$(awk 'BEGIN { rx_total = 0; tx_total = 0 }
        NR > 2 { rx_total += $2; tx_total += $10 }
        END {
            rx_units = "Bytes";
            tx_units = "Bytes";
            if (rx_total > 1024) { rx_total /= 1024; rx_units = "KB"; }
            if (rx_total > 1024) { rx_total /= 1024; rx_units = "MB"; }
            if (rx_total > 1024) { rx_total /= 1024; rx_units = "GB"; }

            if (tx_total > 1024) { tx_total /= 1024; tx_units = "KB"; }
            if (tx_total > 1024) { tx_total /= 1024; tx_units = "MB"; }
            if (tx_total > 1024) { tx_total /= 1024; tx_units = "GB"; }

            printf("总接收: %.2f %s\n总发送: %.2f %s\n", rx_total, rx_units, tx_total, tx_units);
        }' /proc/net/dev)

      current_time=$(date "+%Y-%m-%d %I:%M %p")

      swap_used=$(free -m | awk 'NR==3{print $3}')
      swap_total=$(free -m | awk 'NR==3{print $2}')

      if [ "$swap_total" -eq 0 ]; then
        swap_percentage=0
      else
        swap_percentage=$((swap_used * 100 / swap_total))
      fi

      swap_info="${swap_used}MB/${swap_total}MB (${swap_percentage}%)"

      runtime=$(cat /proc/uptime | awk -F. '{run_days=int($1 / 86400);run_hours=int(($1 % 86400) / 3600);run_minutes=int(($1 % 3600) / 60); if (run_days > 0) printf("%d天 ", run_days); if (run_hours > 0) printf("%d时 ", run_hours); printf("%d分\n", run_minutes)}')

      echo ""
      echo -e "${WHITE}系统信息详情${NC}"
      echo "------------------------"
      echo -e "${WHITE}主机名: ${YELLOW}${hostname}${NC}"
      echo -e "${WHITE}运营商: ${YELLOW}${isp_info}${NC}"
      echo "------------------------"
      echo -e "${WHITE}系统版本: ${YELLOW}${os_info}${NC}"
      echo -e "${WHITE}Linux版本: ${YELLOW}${kernel_version}${NC}"
      echo "------------------------"
      echo -e "${WHITE}CPU架构: ${YELLOW}${cpu_arch}${NC}"
      echo -e "${WHITE}CPU型号: ${YELLOW}${cpu_info}${NC}"
      echo -e "${WHITE}CPU核心数: ${YELLOW}${cpu_cores}${NC}"
      echo "------------------------"
      echo -e "${WHITE}CPU占用: ${YELLOW}${cpu_usage_percent}${NC}"
      echo -e "${WHITE}物理内存: ${YELLOW}${mem_info}${NC}"
      echo -e "${WHITE}虚拟内存: ${YELLOW}${swap_info}${NC}"
      echo -e "${WHITE}硬盘占用: ${YELLOW}${disk_info}${NC}"
      echo "------------------------"
      echo -e "${PURPLE}$output${NC}"
      echo "------------------------"
      echo -e "${WHITE}网络拥堵算法: ${YELLOW}${congestion_algorithm} ${queue_algorithm}${NC}"
      echo "------------------------"
      echo -e "${WHITE}公网IPv4地址: ${YELLOW}${ipv4_address}${NC}"
      echo -e "${WHITE}公网IPv6地址: ${YELLOW}${ipv6_address}${NC}"
      echo "------------------------"
      echo -e "${WHITE}地理位置: ${YELLOW}${country} ${city}${NC}"
      echo -e "${WHITE}系统时间: ${YELLOW}${current_time}${NC}"
      echo "------------------------"
      echo -e "${WHITE}系统运行时长: ${YELLOW}${runtime}${NC}"
      echo ""
      read -n 1 -s -r -p "按任意键返回主菜单..."
      ;;
    2)
      clear
      echo -e "${PURPLE}执行更新系统...${NC}"
      update_system
      echo "系统更新完成"
      read -n 1 -s -r -p "按任意键返回主菜单..."
      ;;
    3)
      clear
      echo -e "${PURPLE}执行 清理系统...${NC}"
      clean_system
      echo "系统清理完成"
      read -n 1 -s -r -p "按任意键返回主菜单..."
      ;;
    4)
      clear
      echo -e "${PURPLE}执行 Yabs测试...${NC}"
      wget -qO- yabs.sh | bash
      read -n 1 -s -r -p "按任意键返回主菜单..."
      ;;
    5)
      clear
      echo -e "${PURPLE}执行 融合怪测试...${NC}"
      curl -L https://gitlab.com/spiritysdx/za/-/raw/main/ecs.sh -o ecs.sh && chmod +x ecs.sh && bash ecs.sh
      read -n 1 -s -r -p "按任意键返回主菜单..."
      ;;
    6)
      clear
      echo -e "${PURPLE}执行 IP质量测试...${NC}"
      bash <(curl -Ls IP.Check.Place)
      read -n 1 -s -r -p "按任意键返回主菜单..."
      ;;
    7)
      clear
      echo -e "${PURPLE}执行 流媒体解锁...${NC}"
      bash <(curl -L -s media.ispvps.com)
      read -n 1 -s -r -p "按任意键返回主菜单..."
      ;;
    8)
      clear
      echo -e "${PURPLE}执行 响应测试脚本...${NC}"
      bash <(curl -sL https://nodebench.mereith.com/scripts/curltime.sh)
      read -n 1 -s -r -p "按任意键返回主菜单..."
      ;;
    9)
      clear
      echo -e "${PURPLE}执行 三网测速(多/单线程)...${NC}"
      bash <(curl -sL https://raw.githubusercontent.com/i-abc/Speedtest/main/speedtest.sh)
      read -n 1 -s -r -p "按任意键返回主菜单..."
      ;;
    10)
      clear
      echo -e "${PURPLE}执行 AutoTrace三网回程路由...${NC}"
      wget -N --no-check-certificate https://raw.githubusercontent.com/Chennhaoo/Shell_Bash/master/AutoTrace.sh && chmod +x AutoTrace.sh && bash AutoTrace.sh
      read -n 1 -s -r -p "按任意键返回主菜单..."
      ;;
    11)
      clear
      echo -e "${PURPLE}执行 安装并启动iperf3服务端...${NC}"
      apt-get install -y iperf3

      # 检查iperf3是否已经在运行
      if pgrep -x "iperf3" > /dev/null
      then
          echo "iperf3 服务已经在运行。"
      else
          echo "启动iperf3服务..."
          iperf3 -s &
          sleep 2
          if pgrep -x "iperf3" > /dev/null
          then
              echo "iperf3服务启动成功,正在监听端口5201。"
          else
              echo "iperf3服务启动失败,请检查是否有其他程序占用了5201端口。"
          fi
      fi

      echo ""
      echo -e "${PURPLE}服务端操作完成。现在您可以在客户端进行测试。${NC}"
      echo ""
      echo "客户端操作,比如Windows:"
      echo -e "${RED}iperf3客户端下载地址(https://iperf.fr/iperf-download.php)${NC}"
      echo "在Windows电脑上,下载iperf3 Windows版本,解压到任意目录,例如D:\iperf3"
      echo "打开命令提示符窗口,切换到iperf3目录:"
      echo "cd D:\iperf3"
      
      echo ""
      echo -e "${BLUE}执行客户端命令,连接到VPS的IP:${NC}"
      echo -e "iperf3.exe -c ${RED}vps_ip${NC}"
      echo "它会进行10秒的默认TCP下载测试。"
      echo "案例:.\iperf3.exe -c 104.234.111.111"
      echo ""
      echo -e "${BLUE}单线程上传测试:${NC}"
      echo -e "iperf3.exe -c ${RED}vps_ip${NC} -R"
      echo "该命令会测试从客户端到服务端VPS的上传带宽。"
      echo "案例:.\iperf3.exe -c 104.234.111.111 -R"
      echo ""
      echo -e "${BLUE}多线程下载测试:${NC}"
      echo -e "iperf3.exe -c ${RED}vps_ip${NC}  -P 4"
      echo "这会运行一个4个流并行下载测试。"
      echo "案例:.\iperf3.exe -c 104.234.111.111 -P 4"
      echo ""
      echo -e "${BLUE}多线程上传测试:${NC}"
      echo -e "iperf3.exe -c ${RED}vps_ip${NC}  -R -P 4"
      echo "案例:.\iperf3.exe -c 104.234.111.111 -R -P 4"
      echo ""
      echo -e "${BLUE}长时间下载测试:${NC}"
      echo -e "iperf3.exe -c ${RED}vps_ip${NC}  -t 60"
      echo "该命令会测试60秒的长时间下载,观察带宽变化。"
      echo "案例:.\iperf3.exe -c 104.234.111.111 -t 60"
      echo ""
      echo -e "${BLUE}UDP模拟视频流测试:${NC}"
      echo -e "iperf3.exe -c ${RED}vps_ip${NC}  -u -b 200m"
      echo "以200mbps的码率,测试UDP下载/模拟视频流。"
      echo "您也可以根据实际需求调整目标带宽-b值。"
      echo "案例:.\iperf3.exe -c 104.234.111.11 -u -b 200m"
      echo ""
      echo -e "${BLUE}其他参数示例:${NC}"
      echo -e ".\iperf3.exe -c ${RED}vps_ip${NC}  -i 1       # 每1秒输出带宽报告"
      echo -e ".\iperf3.exe -c ${RED}vps_ip${NC}  -p 5201    # 指定服务端端口为5201"
      read -n 1 -s -r -p "按任意键返回主菜单..."
      ;;
    12)
      clear
      echo -e "${PURPLE}执行 超售测试...${NC}"
      wget --no-check-certificate -O memoryCheck.sh https://raw.githubusercontent.com/uselibrary/memoryCheck/main/memoryCheck.sh && chmod +x memoryCheck.sh && bash memoryCheck.sh
      read -n 1 -s -r -p "按任意键返回主菜单..."
      ;;
    13)
      clear
      echo -e "${PURPLE}执行 VPS一键脚本工具箱 ...${NC}"
      curl -fsSL https://raw.githubusercontent.com/eooce/ssh_tool/main/ssh_tool.sh -o ssh_tool.sh && chmod +x ssh_tool.sh && ./ssh_tool.sh
      read -n 1 -s -r -p "按任意键返回主菜单..."
      ;;
    14)
      clear
      echo -e "${PURPLE}执行 Jcnf 常用脚本工具包 ...${NC}"
      wget -O jcnfbox.sh https://raw.githubusercontent.com/Netflixxp/jcnf-box/main/jcnfbox.sh && chmod +x jcnfbox.sh && clear && ./jcnfbox.sh
      read -n 1 -s -r -p "按任意键返回主菜单..."
      ;;
    15)
      clear
      echo -e "${PURPLE}执行 科技Lion脚本...${NC}"
      bash <(curl -sL kejilion.sh)
      read -n 1 -s -r -p "按任意键返回主菜单..."
      ;;
    16)
      clear
      echo -e "${PURPLE}执行 BlueSkyXN脚本 ...${NC}"
      wget -O box.sh https://raw.githubusercontent.com/BlueSkyXN/SKY-BOX/main/box.sh && chmod +x box.sh && clear && ./box.sh
      read -n 1 -s -r -p "按任意键返回主菜单..."
      ;;
    17)
      clear
      echo -e "${PURPLE}执行 勇哥Singbox ...${NC}"
      bash <(curl -Ls https://raw.githubusercontent.com/yonggekkk/sing-box-yg/main/sb.sh)
      read -n 1 -s -r -p "按任意键返回主菜单..."
      ;;
    18)
      clear
      echo -e "${PURPLE}执行 勇哥X-UI ...${NC}"
      bash <(curl -Ls https://gitlab.com/rwkgyg/x-ui-yg/raw/main/install.sh)
      read -n 1 -s -r -p "按任意键返回主菜单..."
      ;;
    19)
      clear
      echo -e "${PURPLE}执行 Fscarmen-Singbox ...${NC}"
      bash <(wget -qO- https://raw.githubusercontent.com/fscarmen/sing-box/main/sing-box.sh)
      read -n 1 -s -r -p "按任意键返回主菜单..."
      ;;
    20)
      clear
      echo -e "${PURPLE}执行 3X-UI ...${NC}"
      bash <(curl -Ls https://raw.githubusercontent.com/mhsanaei/3x-ui/master/install.sh)
      read -n 1 -s -r -p "按任意键返回主菜单..."
      ;;
    21)
      clear
      echo -e "${PURPLE}执行 3X-UI优化版...${NC}"
      bash <(curl -Ls https://raw.githubusercontent.com/xeefei/3x-ui/master/install.sh)
      read -n 1 -s -r -p "按任意键返回主菜单..."
      ;;
    22)
      clear
      echo -e "${PURPLE}执行 安装Docker...${NC}"
      curl -fsSL https://get.docker.com | bash -s docker
      read -n 1 -s -r -p "按任意键返回主菜单..."
      ;;
    66)
      clear
      echo -e "${PURPLE}执行 NodeLoc聚合测试脚本...${NC}"
      curl -sSL abc.sd | bash
      read -n 1 -s -r -p "按任意键返回主菜单..."
      ;;
    77)
      clear
      echo -e "${PURPLE}执行 XY网络质量体检脚本...${NC}"
      bash <(curl -sL Net.Check.Place)
      read -n 1 -s -r -p "按任意键返回主菜单..."
      ;;
    88)
      clear
      echo -e "${PURPLE}执行更新脚本...${NC}"
      update_scripts
      echo "脚本更新完成"
      read -n 1 -s -r -p "按任意键返回主菜单..."
      ;;
    99)
      clear
      echo -e "${PURPLE}执行 卸载脚本...${NC}"
      
      # 删除之前可能运行过的脚本
      echo -e "${BLUE}删除之前可能运行过的脚本...${NC}"
      [ -f /root/yabs.sh ] && rm -f /root/yabs.sh
      [ -f /root/ecs.sh ] && rm -f /root/ecs.sh
      [ -f /root/memoryCheck.sh ] && rm -f /root/memoryCheck.sh
      [ -f /root/ssh_tool.sh ] && rm -f /root/ssh_tool.sh
      [ -f /root/kejilion.sh ] && rm -f /root/kejilion.sh
      [ -f /root/box.sh ] && rm -f /root/box.sh
      [ -f /root/AutoTrace.sh ] && rm -f /root/AutoTrace.sh

      # 清理可能的残留文件和目录
      echo -e "${BLUE}清理可能的残留文件和目录...${NC}"
      [ -d /tmp/yabs* ] && rm -rf /tmp/yabs*
      [ -f /tmp/bench.sh* ] && rm -rf /tmp/bench.sh*
      [ -f /root/.ssh_tool_cache ] && rm -f /root/.ssh_tool_cache
      [ -f /root/.ssh_tool_backup ] && rm -f /root/.ssh_tool_backup

      # 尝试卸载Docker(如果是通过脚本安装的)
      echo -e "${BLUE}尝试卸载Docker...${NC}"
      if command -v docker &> /dev/null; then
        echo "正在卸载Docker..."
        sudo apt-get remove docker docker-engine docker.io containerd runc -y
        sudo apt-get purge docker-ce docker-ce-cli containerd.io -y
        sudo rm -rf /var/lib/docker /etc/docker
        sudo groupdel docker 2>/dev/null
        sudo rm -rf /var/run/docker.sock
      fi

      # 删除主脚本及其相关文件
      echo -e "${BLUE}删除主脚本及其相关文件...${NC}"
      [ -f /root/vps.sh ] && rm -f /root/vps.sh
      [ -f /root/.vps_script_count ] && rm -f /root/.vps_script_count
      [ -f /root/.vps_script_daily_count ] && rm -f /root/.vps_script_daily_count
      [ -f /tmp/vps_scripts_updated.flag ] && rm -f /tmp/vps_scripts_updated.flag
      
      echo "脚本卸载完成"
      read -n 1 -s -r -p "按任意键返回主菜单..."
      ;;
    0)
      echo -e "${RED}感谢使用脚本,期待你的下次使用!${NC}"
      exit 0
      ;;
    *)
      echo -e "${RED}无效选择,请重新输入。${NC}"
      sleep 3s
      show_menu  # 修复无效输入后重新显示菜单
      ;;
 esac
}

# 主函数
main() {
  while true; do
    show_welcome
    show_menu
  done
}

# 运行主函数
main