Update 测速中文
This commit is contained in:
579
测速中文
579
测速中文
@@ -1,6 +1,11 @@
|
||||
#!/bin/bash
|
||||
|
||||
echo "🚀 Debian 12 专用网络测速脚本"
|
||||
echo "🚀 Debian/Ubuntu 网络测速与诊断脚本"
|
||||
|
||||
# 脚本信息
|
||||
SCRIPT_NAME="network-speedtest"
|
||||
SCRIPT_VERSION="2.0.0"
|
||||
SCRIPT_AUTHOR="系统优化版"
|
||||
|
||||
# 颜色定义
|
||||
RED='\033[0;31m'
|
||||
@@ -32,41 +37,138 @@ log_result() {
|
||||
echo -e "${CYAN}📊 $1${NC}"
|
||||
}
|
||||
|
||||
# 检查系统是否为 Debian
|
||||
check_debian() {
|
||||
if [ ! -f /etc/debian_version ]; then
|
||||
log_error "此脚本专为 Debian 系统设计"
|
||||
exit 1
|
||||
log_debug() {
|
||||
if [ "$DEBUG" = "true" ]; then
|
||||
echo -e "${PURPLE}🐛 $1${NC}"
|
||||
fi
|
||||
}
|
||||
|
||||
# 显示标题
|
||||
show_header() {
|
||||
echo "=================================================="
|
||||
echo " 🚀 $SCRIPT_NAME v$SCRIPT_VERSION"
|
||||
echo " $SCRIPT_AUTHOR"
|
||||
echo "=================================================="
|
||||
}
|
||||
|
||||
# 检查系统兼容性
|
||||
check_system() {
|
||||
log_info "检查系统环境..."
|
||||
|
||||
# 检查是否为 Debian/Ubuntu 系
|
||||
if [ ! -f /etc/debian_version ] && [ ! -f /etc/lsb-release ]; then
|
||||
if [ -f /etc/redhat-release ] || [ -f /etc/centos-release ]; then
|
||||
log_warning "检测到 RedHat/CentOS 系统,部分功能可能需要调整"
|
||||
elif [ -f /etc/alpine-release ]; then
|
||||
log_warning "检测到 Alpine Linux,建议使用 Debian/Ubuntu 系统"
|
||||
else
|
||||
log_warning "非 Debian/Ubuntu 系统,兼容性可能受限"
|
||||
fi
|
||||
fi
|
||||
|
||||
local version=$(cat /etc/debian_version)
|
||||
log_info "检测到 Debian 版本: $version"
|
||||
# 检测系统版本
|
||||
if [ -f /etc/os-release ]; then
|
||||
source /etc/os-release
|
||||
log_info "检测到系统: $PRETTY_NAME"
|
||||
|
||||
# 检查系统架构
|
||||
local arch=$(uname -m)
|
||||
log_info "系统架构: $arch"
|
||||
|
||||
# 检查内核版本
|
||||
local kernel=$(uname -r)
|
||||
log_info "内核版本: $kernel"
|
||||
fi
|
||||
|
||||
# 检查权限
|
||||
if [ "$EUID" -eq 0 ]; then
|
||||
log_warning "当前以 root 权限运行"
|
||||
else
|
||||
log_info "当前以普通用户权限运行,部分操作需要 sudo"
|
||||
fi
|
||||
}
|
||||
|
||||
# 检查并安装必要工具
|
||||
install_debian_tools() {
|
||||
install_required_tools() {
|
||||
log_info "检查系统工具..."
|
||||
|
||||
local packages=()
|
||||
local package_manager=""
|
||||
local install_cmd=""
|
||||
|
||||
# 检测包管理器
|
||||
if command -v apt-get &> /dev/null; then
|
||||
package_manager="apt"
|
||||
install_cmd="sudo apt-get install -y"
|
||||
elif command -v yum &> /dev/null; then
|
||||
package_manager="yum"
|
||||
install_cmd="sudo yum install -y"
|
||||
elif command -v dnf &> /dev/null; then
|
||||
package_manager="dnf"
|
||||
install_cmd="sudo dnf install -y"
|
||||
elif command -v apk &> /dev/null; then
|
||||
package_manager="apk"
|
||||
install_cmd="sudo apk add"
|
||||
else
|
||||
log_error "未找到支持的包管理器"
|
||||
return 1
|
||||
fi
|
||||
|
||||
log_info "使用包管理器: $package_manager"
|
||||
|
||||
# 基础工具列表
|
||||
local base_tools=("curl" "wget" "ping" "bc" "dig" "traceroute")
|
||||
|
||||
# 根据包管理器调整包名
|
||||
case $package_manager in
|
||||
"apt")
|
||||
packages=("curl" "wget" "iputils-ping" "bc" "dnsutils" "traceroute")
|
||||
;;
|
||||
"yum"|"dnf")
|
||||
packages=("curl" "wget" "iputils" "bc" "bind-utils" "traceroute")
|
||||
;;
|
||||
"apk")
|
||||
packages=("curl" "wget" "iputils" "bc" "bind-tools" "traceroute")
|
||||
;;
|
||||
esac
|
||||
|
||||
# 更新包列表
|
||||
log_info "更新软件包列表..."
|
||||
sudo apt-get update
|
||||
case $package_manager in
|
||||
"apt") sudo apt-get update ;;
|
||||
"yum") sudo yum check-update || true ;;
|
||||
"dnf") sudo dnf check-update || true ;;
|
||||
"apk") sudo apk update ;;
|
||||
esac
|
||||
|
||||
local tools=("curl" "wget" "iputils-ping" "bc" "dnsutils" "traceroute")
|
||||
local missing_tools=()
|
||||
# 检查并安装缺失的包
|
||||
local missing_packages=()
|
||||
|
||||
# 检查缺少的工具
|
||||
for tool in "${tools[@]}"; do
|
||||
if ! dpkg -l | grep -q "^ii $tool "; then
|
||||
missing_tools+=("$tool")
|
||||
for pkg in "${packages[@]}"; do
|
||||
if ! command -v "${pkg%% *}" &> /dev/null && ! dpkg -l | grep -q "^ii ${pkg} " 2>/dev/null; then
|
||||
missing_packages+=("$pkg")
|
||||
fi
|
||||
done
|
||||
|
||||
if [ ${#missing_tools[@]} -ne 0 ]; then
|
||||
log_warning "安装缺少的工具: ${missing_tools[*]}"
|
||||
sudo apt-get install -y "${missing_tools[@]}"
|
||||
if [ ${#missing_packages[@]} -ne 0 ]; then
|
||||
log_warning "需要安装缺失的包: ${missing_packages[*]}"
|
||||
|
||||
if [ $? -eq 0 ]; then
|
||||
log_success "工具安装完成"
|
||||
if [ "$AUTO_INSTALL" = "true" ]; then
|
||||
log_info "自动安装中..."
|
||||
else
|
||||
log_error "工具安装失败"
|
||||
exit 1
|
||||
read -p "是否安装这些包?(Y/n): " -n 1 -r
|
||||
echo
|
||||
if [[ $REPLY =~ ^[Nn]$ ]]; then
|
||||
log_warning "跳过包安装,部分功能可能无法使用"
|
||||
return 0
|
||||
fi
|
||||
fi
|
||||
|
||||
if $install_cmd "${missing_packages[@]}"; then
|
||||
log_success "包安装完成"
|
||||
else
|
||||
log_error "包安装失败"
|
||||
return 1
|
||||
fi
|
||||
else
|
||||
log_success "所有必要工具已安装"
|
||||
@@ -74,68 +176,98 @@ install_debian_tools() {
|
||||
}
|
||||
|
||||
# 安装 speedtest-cli
|
||||
install_speedtest_cli() {
|
||||
if ! command -v speedtest-cli &> /dev/null; then
|
||||
log_info "安装 speedtest-cli..."
|
||||
install_speedtest() {
|
||||
log_info "检查 speedtest 工具..."
|
||||
|
||||
# 方法1: 使用 apt 安装
|
||||
if sudo apt-get install -y speedtest-cli 2>/dev/null; then
|
||||
log_success "speedtest-cli 安装成功"
|
||||
# 检查是否已安装
|
||||
if command -v speedtest &> /dev/null || command -v speedtest-cli &> /dev/null; then
|
||||
log_success "speedtest 已安装"
|
||||
return 0
|
||||
fi
|
||||
|
||||
# 方法2: 使用 pip 安装
|
||||
log_info "安装 speedtest-cli..."
|
||||
|
||||
# 方法1: 使用系统包管理器
|
||||
case $package_manager in
|
||||
"apt")
|
||||
if sudo apt-get install -y speedtest-cli 2>/dev/null; then
|
||||
log_success "通过 apt 安装成功"
|
||||
return 0
|
||||
fi
|
||||
;;
|
||||
"yum"|"dnf")
|
||||
if sudo $package_manager install -y speedtest-cli 2>/dev/null; then
|
||||
log_success "通过 $package_manager 安装成功"
|
||||
return 0
|
||||
fi
|
||||
;;
|
||||
esac
|
||||
|
||||
# 方法2: 使用 pip
|
||||
if command -v pip3 &> /dev/null; then
|
||||
log_info "尝试使用 pip3 安装..."
|
||||
if pip3 install speedtest-cli 2>/dev/null; then
|
||||
log_success "通过 pip3 安装成功"
|
||||
return 0
|
||||
fi
|
||||
fi
|
||||
|
||||
# 方法3: 使用官方脚本
|
||||
log_info "使用官方脚本安装..."
|
||||
if curl -s https://packagecloud.io/install/repositories/ookla/speedtest-cli/script.deb.sh | sudo bash 2>/dev/null; then
|
||||
if sudo apt-get install -y speedtest 2>/dev/null; then
|
||||
log_success "通过官方仓库安装成功"
|
||||
return 0
|
||||
fi
|
||||
fi
|
||||
|
||||
# 方法4: 直接下载
|
||||
log_info "直接下载 speedtest-cli..."
|
||||
if wget -q -O speedtest-cli https://raw.githubusercontent.com/sivel/speedtest-cli/master/speedtest.py; then
|
||||
chmod +x speedtest-cli
|
||||
sudo mv speedtest-cli /usr/local/bin/speedtest-cli
|
||||
|
||||
if command -v speedtest-cli &> /dev/null; then
|
||||
log_success "speedtest-cli 安装成功"
|
||||
return 0
|
||||
fi
|
||||
fi
|
||||
|
||||
# 方法3: 直接下载
|
||||
log_info "直接下载 speedtest-cli..."
|
||||
wget -O speedtest-cli https://raw.githubusercontent.com/sivel/speedtest-cli/master/speedtest.py
|
||||
chmod +x speedtest-cli
|
||||
sudo mv speedtest-cli /usr/local/bin/
|
||||
|
||||
if command -v speedtest-cli &> /dev/null; then
|
||||
log_success "speedtest-cli 安装成功"
|
||||
else
|
||||
log_warning "speedtest-cli 安装失败,跳过"
|
||||
fi
|
||||
fi
|
||||
log_warning "speedtest-cli 安装失败,将使用备用测速方法"
|
||||
return 1
|
||||
}
|
||||
|
||||
# 测试网络连通性
|
||||
# 网络连通性测试
|
||||
test_connectivity() {
|
||||
log_info "检查网络连通性..."
|
||||
log_info "测试网络连通性..."
|
||||
|
||||
# 测试多个国内可靠站点
|
||||
local test_hosts=(
|
||||
"223.5.5.5" # 阿里DNS
|
||||
"114.114.114.114" # 114DNS
|
||||
"1.1.1.1" # Cloudflare
|
||||
"8.8.8.8" # Google DNS
|
||||
"119.29.29.29" # 腾讯DNS
|
||||
)
|
||||
|
||||
local connected=false
|
||||
local success_count=0
|
||||
|
||||
for host in "${test_hosts[@]}"; do
|
||||
if ping -c 2 -W 3 "$host" &> /dev/null; then
|
||||
log_success "网络连接正常 ($host)"
|
||||
log_success "连通 $host"
|
||||
connected=true
|
||||
break
|
||||
((success_count++))
|
||||
else
|
||||
log_warning "无法连接到 $host"
|
||||
log_warning "无法连接 $host"
|
||||
fi
|
||||
done
|
||||
|
||||
if [ "$connected" = false ]; then
|
||||
log_error "所有网络连接测试均失败"
|
||||
log_error "网络连接测试失败"
|
||||
return 1
|
||||
fi
|
||||
|
||||
log_info "网络连通性: $success_count/${#test_hosts[@]} 个测试点成功"
|
||||
return 0
|
||||
}
|
||||
|
||||
@@ -143,15 +275,20 @@ test_connectivity() {
|
||||
test_dns() {
|
||||
log_info "测试 DNS 解析..."
|
||||
|
||||
local domains=("baidu.com" "qq.com" "github.com" "debian.org")
|
||||
local domains=("baidu.com" "qq.com" "taobao.com" "github.com" "debian.org")
|
||||
local success_count=0
|
||||
|
||||
for domain in "${domains[@]}"; do
|
||||
if nslookup "$domain" &> /dev/null; then
|
||||
log_success "DNS 解析正常: $domain"
|
||||
if dig +short "$domain" &> /dev/null; then
|
||||
local ip=$(dig +short "$domain" | head -1)
|
||||
log_success "解析 $domain → $ip"
|
||||
((success_count++))
|
||||
else
|
||||
log_warning "DNS 解析失败: $domain"
|
||||
log_warning "解析失败: $domain"
|
||||
fi
|
||||
done
|
||||
|
||||
log_info "DNS 解析: $success_count/${#domains[@]} 个域名成功"
|
||||
}
|
||||
|
||||
# 延迟测试
|
||||
@@ -168,7 +305,7 @@ test_latency() {
|
||||
for host in "${latency_hosts[@]}"; do
|
||||
if ping -c 4 -W 2 "$host" &> /dev/null; then
|
||||
local result
|
||||
result=$(ping -c 4 -W 2 "$host" | tail -1 | awk -F'/' '{print "平均延迟: "$4" 毫秒"}')
|
||||
result=$(ping -c 4 -W 2 "$host" | tail -1 | awk -F'/' '{print "平均延迟: "$5"ms, 抖动: "$6"ms"}')
|
||||
log_info "$host - $result"
|
||||
else
|
||||
log_warning "$host - 延迟测试失败"
|
||||
@@ -176,17 +313,24 @@ test_latency() {
|
||||
done
|
||||
}
|
||||
|
||||
# 使用 speedtest-cli 测试并显示中文结果
|
||||
test_speedtest_cli() {
|
||||
if command -v speedtest-cli &> /dev/null; then
|
||||
log_info "使用 speedtest-cli 进行专业测速..."
|
||||
# 专业测速
|
||||
test_speed_professional() {
|
||||
log_info "开始专业网络测速..."
|
||||
|
||||
# 运行 speedtest 并捕获输出
|
||||
# 尝试使用 speedtest
|
||||
if command -v speedtest &> /dev/null; then
|
||||
log_info "使用 Ookla speedtest..."
|
||||
if speedtest --accept-license --simple; then
|
||||
return 0
|
||||
fi
|
||||
fi
|
||||
|
||||
if command -v speedtest-cli &> /dev/null; then
|
||||
log_info "使用 speedtest-cli..."
|
||||
local result
|
||||
result=$(speedtest-cli --simple 2>/dev/null)
|
||||
|
||||
if [ $? -eq 0 ] && [ -n "$result" ]; then
|
||||
# 解析并转换结果为中文
|
||||
echo "$result" | while IFS= read -r line; do
|
||||
case $line in
|
||||
Ping:*)
|
||||
@@ -204,143 +348,181 @@ test_speedtest_cli() {
|
||||
esac
|
||||
done
|
||||
return 0
|
||||
else
|
||||
return 1
|
||||
fi
|
||||
else
|
||||
return 1
|
||||
fi
|
||||
|
||||
# 备用测速方法
|
||||
test_speed_backup
|
||||
}
|
||||
|
||||
# 格式化速度值
|
||||
format_speed() {
|
||||
local speed=$1
|
||||
local unit=$2
|
||||
# 备用测速方法
|
||||
test_speed_backup() {
|
||||
log_info "使用备用方法测速..."
|
||||
|
||||
case $unit in
|
||||
"Mbit/s")
|
||||
echo "$speed Mbit/s"
|
||||
;;
|
||||
"Gbit/s")
|
||||
echo "$speed Gbit/s"
|
||||
;;
|
||||
"Kbit/s")
|
||||
echo "$speed Kbit/s"
|
||||
;;
|
||||
*)
|
||||
echo "$speed $unit"
|
||||
;;
|
||||
esac
|
||||
}
|
||||
|
||||
# 下载速度测试(备用方法)
|
||||
test_download_speed_backup() {
|
||||
log_info "使用备用方法测试下载速度..."
|
||||
|
||||
local speed_test_urls=(
|
||||
# 使用 cachefly 的测速节点
|
||||
local test_urls=(
|
||||
"http://cachefly.cachefly.net/100mb.test"
|
||||
"http://speedtest.ftp.otenet.gr/files/test100Mb.db"
|
||||
"http://ipv4.download.thinkbroadband.com/100MB.zip"
|
||||
)
|
||||
|
||||
for url in "${speed_test_urls[@]}"; do
|
||||
log_info "尝试节点: $(echo "$url" | cut -d'/' -f1-3)"
|
||||
for url in "${test_urls[@]}"; do
|
||||
log_info "尝试节点: $(basename "$url")"
|
||||
|
||||
if curl -I --connect-timeout 10 "$url" &> /dev/null; then
|
||||
if curl -I --connect-timeout 5 "$url" &> /dev/null; then
|
||||
local start_time end_time download_time speed_mbps
|
||||
|
||||
start_time=$(date +%s.%N)
|
||||
curl -L --max-time 30 --progress-bar -o /dev/null "$url" > /dev/null 2>&1
|
||||
if curl -L --max-time 30 --progress-bar -o /dev/null "$url" &> /dev/null; then
|
||||
end_time=$(date +%s.%N)
|
||||
|
||||
download_time=$(echo "$end_time - $start_time" | bc)
|
||||
|
||||
if [ -n "$download_time" ] && [ "$(echo "$download_time > 0.1" | bc)" -eq 1 ]; then
|
||||
# 假设下载了约100MB数据
|
||||
local file_size_bytes=100000000
|
||||
speed_mbps=$(echo "scale=2; ($file_size_bytes * 8) / ($download_time * 1000000)" | bc)
|
||||
|
||||
if [ -n "$speed_mbps" ]; then
|
||||
if [ -n "$download_time" ] && [ "$(echo "$download_time > 0.1" | bc -l)" -eq 1 ]; then
|
||||
speed_mbps=$(echo "scale=2; (100 * 8) / $download_time" | bc)
|
||||
log_result "⬇️ 下载速度: ${speed_mbps} Mbit/s"
|
||||
log_result "⬆️ 上传速度: 测试中..."
|
||||
# 估算上传速度(通常是下载速度的30-50%)
|
||||
|
||||
# 估算上传速度
|
||||
local upload_speed=$(echo "scale=2; $speed_mbps * 0.4" | bc)
|
||||
log_result "⬆️ 上传速度: ${upload_speed} Mbit/s"
|
||||
log_result "⬆️ 上传速度: ${upload_speed} Mbit/s (估算值)"
|
||||
return 0
|
||||
fi
|
||||
fi
|
||||
fi
|
||||
done
|
||||
|
||||
log_warning "备用测速方法失败"
|
||||
return 1
|
||||
}
|
||||
|
||||
# 网络接口信息
|
||||
show_network_info() {
|
||||
log_info "收集网络信息..."
|
||||
|
||||
# IP 地址信息
|
||||
log_info "IP 地址信息:"
|
||||
ip -4 addr show | grep inet | awk '{print " " $2}' | head -5
|
||||
|
||||
# 默认网关
|
||||
log_info "默认网关:"
|
||||
ip route | grep default | awk '{print " " $3}'
|
||||
|
||||
# DNS 服务器
|
||||
log_info "DNS 服务器:"
|
||||
if [ -f /etc/resolv.conf ]; then
|
||||
grep nameserver /etc/resolv.conf | awk '{print " " $2}'
|
||||
fi
|
||||
}
|
||||
|
||||
# 路由追踪
|
||||
test_traceroute() {
|
||||
if [ "$QUICK_MODE" = "true" ]; then
|
||||
return 0
|
||||
fi
|
||||
|
||||
log_info "进行路由追踪..."
|
||||
|
||||
if command -v traceroute &> /dev/null; then
|
||||
traceroute -m 10 223.5.5.5 | head -15
|
||||
traceroute -m 8 -w 2 223.5.5.5 | head -12
|
||||
else
|
||||
log_warning "traceroute 不可用"
|
||||
fi
|
||||
}
|
||||
|
||||
# 网络接口信息
|
||||
show_network_info() {
|
||||
log_info "网络接口信息:"
|
||||
ip addr show | grep -E "^( |[0-9])" | grep -E "inet|state" | head -10
|
||||
|
||||
log_info "路由表信息:"
|
||||
ip route | head -5
|
||||
}
|
||||
|
||||
# 显示测速结果总结
|
||||
show_speed_summary() {
|
||||
echo ""
|
||||
echo "=================================================="
|
||||
log_result " 📊 网络测速结果总结"
|
||||
echo "=================================================="
|
||||
|
||||
# 这里显示最终的测速结果
|
||||
if [ -n "$PING_RESULT" ]; then
|
||||
log_result "🔄 网络延迟: $PING_RESULT"
|
||||
fi
|
||||
|
||||
if [ -n "$DOWNLOAD_RESULT" ]; then
|
||||
log_result "⬇️ 下载速度: $DOWNLOAD_RESULT"
|
||||
fi
|
||||
|
||||
if [ -n "$UPLOAD_RESULT" ]; then
|
||||
log_result "⬆️ 上传速度: $UPLOAD_RESULT"
|
||||
fi
|
||||
|
||||
echo "=================================================="
|
||||
}
|
||||
|
||||
# 清理函数
|
||||
cleanup() {
|
||||
log_info "清理临时文件..."
|
||||
log_debug "清理临时文件..."
|
||||
rm -f /tmp/speedtest*.tmp
|
||||
rm -f speedtest-cli
|
||||
rm -f speedtest-cli 2>/dev/null
|
||||
}
|
||||
|
||||
# 显示帮助信息
|
||||
show_help() {
|
||||
echo "使用方法: $0 [选项]"
|
||||
echo
|
||||
echo "选项:"
|
||||
echo " -h, --help 显示此帮助信息"
|
||||
echo " -v, --version 显示版本信息"
|
||||
echo " -q, --quick 快速模式(跳过路由追踪)"
|
||||
echo " -f, --full 完整模式(包含详细诊断)"
|
||||
echo " -y, --yes 自动确认所有提示"
|
||||
echo " -d, --debug 调试模式"
|
||||
echo
|
||||
echo "示例:"
|
||||
echo " $0 # 标准模式"
|
||||
echo " $0 -q # 快速模式"
|
||||
echo " $0 -y # 自动确认"
|
||||
}
|
||||
|
||||
# 显示版本信息
|
||||
show_version() {
|
||||
echo "$SCRIPT_NAME v$SCRIPT_VERSION"
|
||||
echo "适用于 Debian/Ubuntu 系统的网络测速工具"
|
||||
}
|
||||
|
||||
# 参数解析
|
||||
parse_arguments() {
|
||||
QUICK_MODE="false"
|
||||
AUTO_INSTALL="false"
|
||||
DEBUG="false"
|
||||
|
||||
while [[ $# -gt 0 ]]; do
|
||||
case $1 in
|
||||
-h|--help)
|
||||
show_help
|
||||
exit 0
|
||||
;;
|
||||
-v|--version)
|
||||
show_version
|
||||
exit 0
|
||||
;;
|
||||
-q|--quick)
|
||||
QUICK_MODE="true"
|
||||
shift
|
||||
;;
|
||||
-f|--full)
|
||||
QUICK_MODE="false"
|
||||
shift
|
||||
;;
|
||||
-y|--yes)
|
||||
AUTO_INSTALL="true"
|
||||
shift
|
||||
;;
|
||||
-d|--debug)
|
||||
DEBUG="true"
|
||||
shift
|
||||
;;
|
||||
*)
|
||||
log_error "未知参数: $1"
|
||||
show_help
|
||||
exit 1
|
||||
;;
|
||||
esac
|
||||
done
|
||||
}
|
||||
|
||||
# 主函数
|
||||
main() {
|
||||
echo "=================================================="
|
||||
echo " 🚀 Debian 12 网络测速脚本"
|
||||
echo "=================================================="
|
||||
# 解析参数
|
||||
parse_arguments "$@"
|
||||
|
||||
# 显示标题
|
||||
show_header
|
||||
|
||||
# 设置错误处理
|
||||
set -e
|
||||
trap 'cleanup; log_error "脚本执行中断"; exit 130' INT TERM
|
||||
trap 'cleanup' EXIT
|
||||
|
||||
# 检查系统
|
||||
check_debian
|
||||
# 系统检查
|
||||
check_system
|
||||
|
||||
# 安装必要工具
|
||||
install_debian_tools
|
||||
install_speedtest_cli
|
||||
if ! install_required_tools; then
|
||||
log_error "工具安装失败"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# 安装 speedtest
|
||||
install_speedtest
|
||||
|
||||
# 测试网络连通性
|
||||
if ! test_connectivity; then
|
||||
@@ -365,107 +547,30 @@ main() {
|
||||
|
||||
echo ""
|
||||
|
||||
# 使用 speedtest-cli 进行专业测速
|
||||
log_info "开始专业网络测速..."
|
||||
if test_speedtest_cli; then
|
||||
log_success "专业测速完成"
|
||||
else
|
||||
log_warning "专业测速失败,使用备用方法"
|
||||
test_download_speed_backup
|
||||
# 专业测速
|
||||
if ! test_speed_professional; then
|
||||
log_warning "专业测速失败"
|
||||
fi
|
||||
|
||||
echo ""
|
||||
|
||||
# 路由追踪(可选)
|
||||
read -p "是否进行路由追踪?(y/N): " -n 1 -r
|
||||
echo
|
||||
if [[ $REPLY =~ ^[Yy]$ ]]; then
|
||||
# 路由追踪
|
||||
if [ "$QUICK_MODE" = "false" ]; then
|
||||
test_traceroute
|
||||
fi
|
||||
|
||||
# 显示测速结果总结
|
||||
show_speed_summary
|
||||
|
||||
echo ""
|
||||
log_success "网络测速完成"
|
||||
|
||||
# 显示建议
|
||||
# 显示使用建议
|
||||
echo ""
|
||||
log_info "网络质量评估:"
|
||||
if [ -n "$PING_RESULT" ]; then
|
||||
local ping_ms=$(echo "$PING_RESULT" | grep -o '[0-9.]*' | head -1)
|
||||
if [ -n "$ping_ms" ]; then
|
||||
if (( $(echo "$ping_ms < 50" | bc -l) )); then
|
||||
log_success "延迟优秀 (<50ms)"
|
||||
elif (( $(echo "$ping_ms < 100" | bc -l) )); then
|
||||
log_info "延迟良好 (50-100ms)"
|
||||
elif (( $(echo "$ping_ms < 200" | bc -l) )); then
|
||||
log_warning "延迟一般 (100-200ms)"
|
||||
else
|
||||
log_error "延迟较差 (>200ms)"
|
||||
fi
|
||||
fi
|
||||
fi
|
||||
log_info "提示:"
|
||||
echo " - 使用 '$0 -q' 进行快速测速"
|
||||
echo " - 使用 '$0 -y' 自动确认所有提示"
|
||||
echo " - 定期运行以监控网络质量"
|
||||
}
|
||||
|
||||
# 显示使用说明
|
||||
show_usage() {
|
||||
echo "使用方法: $0 [选项]"
|
||||
echo "选项:"
|
||||
echo " -h, --help 显示此帮助信息"
|
||||
echo " -q, --quick 快速模式(跳过路由追踪)"
|
||||
echo " -f, --full 完整模式(包含所有测试)"
|
||||
}
|
||||
|
||||
# 全局变量存储测速结果
|
||||
PING_RESULT=""
|
||||
DOWNLOAD_RESULT=""
|
||||
UPLOAD_RESULT=""
|
||||
|
||||
# 重写 speedtest 函数来保存结果
|
||||
test_speedtest_cli() {
|
||||
if command -v speedtest-cli &> /dev/null; then
|
||||
log_info "使用 speedtest-cli 进行专业测速..."
|
||||
|
||||
# 运行 speedtest 并捕获输出
|
||||
local result
|
||||
result=$(speedtest-cli --simple 2>/dev/null)
|
||||
|
||||
if [ $? -eq 0 ] && [ -n "$result" ]; then
|
||||
# 解析并保存结果
|
||||
PING_RESULT=$(echo "$result" | grep "Ping:" | awk '{print $2 " " $3}')
|
||||
DOWNLOAD_RESULT=$(echo "$result" | grep "Download:" | awk '{print $2 " " $3}')
|
||||
UPLOAD_RESULT=$(echo "$result" | grep "Upload:" | awk '{print $2 " " $3}')
|
||||
|
||||
# 显示中文结果
|
||||
log_result "🔄 网络延迟: $PING_RESULT"
|
||||
log_result "⬇️ 下载速度: $DOWNLOAD_RESULT"
|
||||
log_result "⬆️ 上传速度: $UPLOAD_RESULT"
|
||||
|
||||
return 0
|
||||
else
|
||||
return 1
|
||||
fi
|
||||
else
|
||||
return 1
|
||||
fi
|
||||
}
|
||||
|
||||
# 参数解析
|
||||
case "${1:-}" in
|
||||
-h|--help)
|
||||
show_usage
|
||||
exit 0
|
||||
;;
|
||||
-q|--quick)
|
||||
# 快速模式
|
||||
main
|
||||
;;
|
||||
-f|--full)
|
||||
# 完整模式
|
||||
main
|
||||
;;
|
||||
*)
|
||||
main
|
||||
;;
|
||||
esac
|
||||
# 脚本入口
|
||||
if [[ "${BASH_SOURCE[0]}" == "${0}" ]]; then
|
||||
main "$@"
|
||||
fi
|
||||
|
||||
Reference in New Issue
Block a user