Update 测速中文

This commit is contained in:
2025-11-01 16:34:31 +08:00
committed by GitHub
parent c44e9ffe8c
commit e49e5ffa5b

View File

@@ -59,7 +59,7 @@ install_tools() {
fi fi
# 安装必要工具 # 安装必要工具
TOOLS=("curl" "wget" "ping" "bc") TOOLS=("curl" "wget" "ping" "bc" "pip3" "python3")
for tool in "${TOOLS[@]}"; do for tool in "${TOOLS[@]}"; do
if ! check_command "$tool"; then if ! check_command "$tool"; then
echo -e "${BLUE}安装 $tool...${NC}" echo -e "${BLUE}安装 $tool...${NC}"
@@ -76,6 +76,15 @@ install_tools() {
"bc") "bc")
$INSTALL_CMD bc >/dev/null 2>&1 || echo -e "${YELLOW}⚠️ bc 安装失败${NC}" $INSTALL_CMD bc >/dev/null 2>&1 || echo -e "${YELLOW}⚠️ bc 安装失败${NC}"
;; ;;
"pip3"|"python3")
if [ "$PM" = "apt-get" ]; then
$INSTALL_CMD python3 python3-pip >/dev/null 2>&1 || echo -e "${YELLOW}⚠️ python3 安装失败${NC}"
elif [ "$PM" = "yum" ] || [ "$PM" = "dnf" ]; then
$INSTALL_CMD python3 python3-pip >/dev/null 2>&1 || echo -e "${YELLOW}⚠️ python3 安装失败${NC}"
elif [ "$PM" = "apk" ]; then
$INSTALL_CMD python3 py3-pip >/dev/null 2>&1 || echo -e "${YELLOW}⚠️ python3 安装失败${NC}"
fi
;;
*) *)
$INSTALL_CMD "$tool" >/dev/null 2>&1 || echo -e "${YELLOW}⚠️ $tool 安装失败${NC}" $INSTALL_CMD "$tool" >/dev/null 2>&1 || echo -e "${YELLOW}⚠️ $tool 安装失败${NC}"
;; ;;
@@ -84,70 +93,134 @@ install_tools() {
done done
} }
# 安装speedtest # 清理和修复speedtest安装
clean_speedtest() {
echo -e "${BLUE}🧹 清理可能损坏的speedtest...${NC}"
# 卸载各种版本的speedtest
apt-get remove -y speedtest-cli 2>/dev/null
pip uninstall -y speedtest-cli 2>/dev/null
pip3 uninstall -y speedtest-cli 2>/dev/null
rm -f /usr/local/bin/speedtest-cli
rm -f /usr/bin/speedtest
rm -f /usr/bin/speedtest-cli
echo -e "${GREEN}✅ 清理完成${NC}"
}
# 安装speedtest - 增强版本
install_speedtest() { install_speedtest() {
echo -e "${BLUE}📦 检查并安装speedtest...${NC}" echo -e "${BLUE}📦 检查并安装speedtest...${NC}"
# 检查是否已安装 # 检查是否已安装
if check_command speedtest || check_command speedtest-cli; then if check_command speedtest; then
echo -e "${GREEN}✅ speedtest 已安装${NC}" echo -e "${GREEN}✅ speedtest 已安装${NC}"
speedtest --version
return 0 return 0
fi fi
# 尝试不同的安装方法 # 清理旧版本
echo -e "${BLUE}尝试安装speedtest...${NC}" clean_speedtest
# 方法1: 使用包管理器安装 # 方法1: 安装官方ookla speedtest (首选)
if [ "$PM" = "apt-get" ]; then echo -e "${BLUE}尝试安装官方speedtest...${NC}"
if $INSTALL_CMD speedtest-cli >/dev/null 2>&1; then
echo -e "${GREEN}✅ speedtest-cli 安装成功${NC}"
return 0
fi
elif [ "$PM" = "yum" ] || [ "$PM" = "dnf" ]; then
if $INSTALL_CMD speedtest-cli >/dev/null 2>&1; then
echo -e "${GREEN}✅ speedtest-cli 安装成功${NC}"
return 0
fi
fi
# 方法2: 使用pip安装
if check_command pip3; then
if pip3 install speedtest-cli >/dev/null 2>&1; then
echo -e "${GREEN}✅ speedtest-cli pip安装成功${NC}"
return 0
fi
elif check_command pip; then
if pip install speedtest-cli >/dev/null 2>&1; then
echo -e "${GREEN}✅ speedtest-cli pip安装成功${NC}"
return 0
fi
fi
# 方法3: 使用curl下载官方speedtest
if check_command curl; then if check_command curl; then
echo -e "${BLUE}尝试下载官方speedtest...${NC}"
if curl -s https://install.speedtest.net/app/cli/install.deb.sh | bash >/dev/null 2>&1; then if curl -s https://install.speedtest.net/app/cli/install.deb.sh | bash >/dev/null 2>&1; then
if $INSTALL_CMD speedtest >/dev/null 2>&1; then if $UPDATE_CMD >/dev/null 2>&1 && $INSTALL_CMD speedtest >/dev/null 2>&1; then
echo -e "${GREEN}✅ 官方speedtest安装成功${NC}" echo -e "${GREEN}✅ 官方speedtest安装成功${NC}"
speedtest --version
return 0 return 0
fi fi
fi fi
fi fi
# 方法4: 使用wget下载speedtest-cli # 方法2: 直接下载二进制文件
echo -e "${BLUE}尝试下载二进制speedtest...${NC}"
if check_command wget; then if check_command wget; then
echo -e "${BLUE}尝试wget下载speedtest...${NC}" ARCH=$(uname -m)
if wget -q -O speedtest-cli https://raw.githubusercontent.com/sivel/speedtest-cli/master/speedtest.py && \ if [ "$ARCH" = "x86_64" ]; then
chmod +x speedtest-cli && mv speedtest-cli /usr/local/bin/; then SPEEDTEST_URL="https://install.speedtest.net/app/cli/ookla-speedtest-1.2.0-linux-x86_64.tgz"
echo -e "${GREEN}✅ speedtest-cli 下载安装成功${NC}" elif [ "$ARCH" = "aarch64" ]; then
SPEEDTEST_URL="https://install.speedtest.net/app/cli/ookla-speedtest-1.2.0-linux-aarch64.tgz"
else
SPEEDTEST_URL="https://install.speedtest.net/app/cli/ookla-speedtest-1.2.0-linux-x86_64.tgz"
fi
if wget -q -O speedtest.tgz "$SPEEDTEST_URL" && \
tar -xzf speedtest.tgz && \
mv speedtest /usr/local/bin/ && \
chmod +x /usr/local/bin/speedtest; then
echo -e "${GREEN}✅ 二进制speedtest安装成功${NC}"
speedtest --version
return 0
fi
rm -f speedtest.tgz
fi
# 方法3: 使用pip安装
echo -e "${BLUE}尝试pip安装speedtest-cli...${NC}"
if check_command pip3; then
if pip3 install speedtest-cli >/dev/null 2>&1; then
echo -e "${GREEN}✅ speedtest-cli pip安装成功${NC}"
return 0 return 0
fi fi
fi fi
echo -e "${YELLOW}⚠️ speedtest安装失败跳过测速功能${NC}" # 方法4: 使用包管理器安装
echo -e "${BLUE}尝试包管理器安装...${NC}"
if [ "$PM" = "apt-get" ]; then
if $INSTALL_CMD speedtest-cli >/dev/null 2>&1; then
echo -e "${GREEN}✅ speedtest-cli 包管理器安装成功${NC}"
return 0
fi
elif [ "$PM" = "yum" ] || [ "$PM" = "dnf" ]; then
if $INSTALL_CMD speedtest-cli >/dev/null 2>&1; then
echo -e "${GREEN}✅ speedtest-cli 包管理器安装成功${NC}"
return 0
fi
fi
echo -e "${YELLOW}⚠️ speedtest安装失败将使用备用测速方法${NC}"
return 1 return 1
} }
# 备用网络测速方法
backup_speed_test() {
echo -e "${CYAN}🔄 使用备用方法进行网络测速...${NC}"
# 测试下载速度到多个测速服务器
servers=(
"http://speedtest.ftp.otenet.gr/files/test1Mb.db"
"http://ipv4.download.thinkbroadband.com/1MB.zip"
"http://proof.ovh.net/files/1Mb.dat"
)
for server in "${servers[@]}"; do
echo -e "${BLUE}测试服务器: $(basename $server)${NC}"
if check_command wget; then
start_time=$(date +%s)
if wget -O /dev/null --timeout=10 --tries=2 "$server" >/dev/null 2>&1; then
end_time=$(date +%s)
duration=$((end_time - start_time))
if [ $duration -eq 0 ]; then
duration=1
fi
speed=$(echo "scale=2; 8 / $duration" | bc -l 2>/dev/null || echo "N/A")
echo -e "${GREEN} 下载速度: ${speed} Mbps${NC}"
break
else
echo -e "${YELLOW} 服务器不可用${NC}"
fi
fi
done
# 使用iperf3测试如果可用
if check_command iperf3; then
echo -e "${BLUE}使用iperf3测试...${NC}"
iperf3 -c speedtest.serverius.net -p 5202 -t 5 -O 2 2>/dev/null | grep -E "sender|receiver" | head -2
fi
}
# 检查系统兼容性 # 检查系统兼容性
check_system() { check_system() {
echo -e "${BLUE}🔍 检查系统环境...${NC}" echo -e "${BLUE}🔍 检查系统环境...${NC}"
@@ -227,84 +300,44 @@ test_latency() {
done done
} }
# Speedtest测速 # Speedtest测速 - 增强版本
test_speed() { test_speed() {
echo -e "${CYAN}🚀 进行Speedtest测速...${NC}" echo -e "${CYAN}🚀 进行Speedtest测速...${NC}"
# 调试信息
echo -e "${BLUE}可用的speedtest命令:${NC}"
which speedtest 2>/dev/null && echo -e " speedtest: $(speedtest --version 2>/dev/null || echo '无法获取版本')"
which speedtest-cli 2>/dev/null && echo -e " speedtest-cli: $(speedtest-cli --version 2>/dev/null || echo '无法获取版本')"
# 检查是否有可用的speedtest命令 # 检查是否有可用的speedtest命令
SPEEDTEST_CMD="" SPEEDTEST_CMD=""
if check_command speedtest; then if check_command speedtest; then
SPEEDTEST_CMD="speedtest --simple" SPEEDTEST_CMD="speedtest --accept-license --accept-gdpr --simple"
elif check_command speedtest-cli; then elif check_command speedtest-cli; then
SPEEDTEST_CMD="speedtest-cli --simple" SPEEDTEST_CMD="speedtest-cli --simple"
elif [ -f /usr/local/bin/speedtest-cli ]; then elif [ -f /usr/local/bin/speedtest ]; then
SPEEDTEST_CMD="/usr/local/bin/speedtest-cli --simple" SPEEDTEST_CMD="/usr/local/bin/speedtest --accept-license --accept-gdpr --simple"
fi fi
if [ -n "$SPEEDTEST_CMD" ]; then if [ -n "$SPEEDTEST_CMD" ]; then
echo -e "${BLUE}使用命令: $SPEEDTEST_CMD${NC}" echo -e "${BLUE}使用命令: $SPEEDTEST_CMD${NC}"
result=$($SPEEDTEST_CMD 2>/dev/null)
if [ $? -eq 0 ] && [ -n "$result" ]; then # 设置超时,防止卡住
echo "$result" | sed -E " timeout 60 bash -c "$SPEEDTEST_CMD" 2>/dev/null
s/Ping:/🔄 网络延迟:/ result=$?
s/Download:/⬇️ 下载速度:/
s/Upload:/⬆️ 上传速度:/ if [ $result -eq 0 ]; then
s/ ms/ 毫秒/ echo -e "${GREEN}✅ speedtest测速成功${NC}"
s/ Mbit\/s/ Mbit\/秒/ elif [ $result -eq 124 ]; then
" | while read line; do echo -e "${YELLOW}⚠️ speedtest测速超时${NC}"
if [[ $line == *"网络延迟"* ]]; then backup_speed_test
latency=$(echo "$line" | grep -o '[0-9.]*')
if command -v bc >/dev/null 2>&1 && [ -n "$latency" ]; then
if (( $(echo "$latency < 50" | bc -l 2>/dev/null) )); then
echo -e "${GREEN}$line ✅${NC}"
elif (( $(echo "$latency < 100" | bc -l 2>/dev/null) )); then
echo -e "${GREEN}$line 👍${NC}"
elif (( $(echo "$latency < 200" | bc -l 2>/dev/null) )); then
echo -e "${YELLOW}$line ⚠️${NC}"
else
echo -e "${RED}$line ❌${NC}"
fi
else
echo -e "${GREEN}$line${NC}"
fi
elif [[ $line == *"下载速度"* ]]; then
speed=$(echo "$line" | grep -o '[0-9.]*')
if command -v bc >/dev/null 2>&1 && [ -n "$speed" ]; then
if (( $(echo "$speed > 50" | bc -l 2>/dev/null) )); then
echo -e "${GREEN}$line 🚀${NC}"
elif (( $(echo "$speed > 10" | bc -l 2>/dev/null) )); then
echo -e "${GREEN}$line 👍${NC}"
else
echo -e "${YELLOW}$line ⚠️${NC}"
fi
else
echo -e "${GREEN}$line${NC}"
fi
elif [[ $line == *"上传速度"* ]]; then
speed=$(echo "$line" | grep -o '[0-9.]*')
if command -v bc >/dev/null 2>&1 && [ -n "$speed" ]; then
if (( $(echo "$speed > 20" | bc -l 2>/dev/null) )); then
echo -e "${BLUE}$line 🚀${NC}"
elif (( $(echo "$speed > 5" | bc -l 2>/dev/null) )); then
echo -e "${BLUE}$line 👍${NC}"
else
echo -e "${YELLOW}$line ⚠️${NC}"
fi
else
echo -e "${BLUE}$line${NC}"
fi
fi
done
else else
echo -e "${YELLOW}⚠️ speedtest测速失败跳过此测试${NC}" echo -e "${YELLOW}⚠️ speedtest测速失败错误码: $result${NC}"
backup_speed_test
fi fi
else else
echo -e "${YELLOW}⚠️ 未找到speedtest,跳过测速功能${NC}" echo -e "${YELLOW}⚠️ 未找到speedtest命令${NC}"
echo -e "${BLUE}💡 提示: 可以手动安装speedtest:${NC}" backup_speed_test
echo -e "${BLUE} Ubuntu/Debian: apt-get install speedtest-cli${NC}"
echo -e "${BLUE} CentOS/RHEL: yum install speedtest-cli${NC}"
echo -e "${BLUE} 或使用: curl -s https://install.speedtest.net/app/cli/install.deb.sh | sudo bash${NC}"
fi fi
} }
@@ -312,7 +345,8 @@ test_speed() {
show_system_info() { show_system_info() {
echo -e "${PURPLE}" echo -e "${PURPLE}"
echo "==================================================" echo "=================================================="
echo " 🌈 精准网络测速脚本" echo " 🌈 精准网络测速脚本 v3.0"
echo " 增强版 - 多方法测速 | 自动修复 | 备用方案"
echo " 支持: Ubuntu/Debian/CentOS/RHEL" echo " 支持: Ubuntu/Debian/CentOS/RHEL"
echo "==================================================" echo "=================================================="
echo -e "${NC}" echo -e "${NC}"
@@ -327,25 +361,36 @@ show_usage() {
echo -e " $0 [选项]" echo -e " $0 [选项]"
echo -e "" echo -e ""
echo -e "${GREEN}选项:${NC}" echo -e "${GREEN}选项:${NC}"
echo -e " -h, --help 显示此帮助信息" echo -e " -h, --help 显示此帮助信息"
echo -e " -v, --version 显示版本信息" echo -e " -v, --version 显示版本信息"
echo -e " -f, --force 强制重新安装speedtest"
echo -e "" echo -e ""
echo -e "${GREEN}功能:${NC}" echo -e "${GREEN}功能:${NC}"
echo -e " ✅ 系统环境检测" echo -e " ✅ 系统环境检测"
echo -e " ✅ 自动安装依赖工具" echo -e " ✅ 自动安装依赖工具"
echo -e " ✅ 网络连通性测试" echo -e " ✅ 网络连通性测试"
echo -e " ✅ 多节点延迟测试" echo -e " ✅ 多节点延迟测试"
echo -e " ✅ Speedtest网速测试" echo -e " ✅ Speedtest网速测试 (多方法)"
echo -e " ✅ 备用测速方案"
echo -e " ✅ 自动修复安装问题"
echo -e "" echo -e ""
echo -e "${GREEN}示例:${NC}" echo -e "${GREEN}示例:${NC}"
echo -e " $0 # 运行完整测试" echo -e " $0 # 运行完整测试"
echo -e " $0 --help # 显示帮助" echo -e " $0 --force # 强制重新安装speedtest"
echo -e " $0 --help # 显示帮助"
} }
# 显示版本信息 # 显示版本信息
show_version() { show_version() {
echo -e "${GREEN}精准网络测速脚本 v2.0${NC}" echo -e "${GREEN}精准网络测速脚本 v3.0${NC}"
echo -e "支持多系统网络性能测试" echo -e "增强版 - 多方法测速 | 自动修复 | 备用方案"
}
# 强制重新安装speedtest
force_reinstall_speedtest() {
echo -e "${YELLOW}🔄 强制重新安装speedtest...${NC}"
clean_speedtest
install_speedtest
} }
# 主函数 # 主函数
@@ -360,6 +405,9 @@ main() {
show_version show_version
exit 0 exit 0
;; ;;
-f|--force)
FORCE_REINSTALL=true
;;
*) *)
# 正常执行 # 正常执行
;; ;;
@@ -367,13 +415,19 @@ main() {
show_system_info show_system_info
install_tools install_tools
echo ""
if [ "$FORCE_REINSTALL" = true ]; then
force_reinstall_speedtest
else
install_speedtest
fi
echo "" echo ""
test_connectivity test_connectivity
echo "" echo ""
test_latency test_latency
echo "" echo ""
install_speedtest
echo ""
test_speed test_speed
echo "" echo ""