资讯动态

MacOS/Linux命令行网络测速脚本开发与实践

发布时间:2026/10/27 14:04:52 来源:尧图企业网站定制
1. 网络测速脚本为什么需要它在MacOS和Linux系统上我们经常遇到网络连接不稳定、下载速度异常或视频卡顿的情况。这时候一个轻量级的本地测速工具就显得尤为重要。不同于网页版测速工具需要打开浏览器命令行测速脚本可以直接在终端运行快速获取网络质量数据。我开发这个脚本的初衷是因为在远程办公时频繁遇到视频会议卡顿的问题。网页测速工具要么需要Flash支持现在已经淘汰要么测试结果受浏览器性能影响。通过命令行脚本可以排除浏览器性能干扰定时自动测试并记录结果集成到自动化运维系统中2. 脚本功能设计2.1 核心功能模块这个测速脚本包含三个主要测试维度延迟测试通过ping命令测量到目标服务器的往返时间下载速度测试从测试服务器下载指定大小的文件上传速度测试向测试服务器上传测试文件注意选择测试服务器时建议使用地理位置较近的节点结果会更准确。我通常会准备3-5个不同运营商的测试节点作为备选。2.2 技术实现方案脚本采用Bash编写确保在大多数MacOS和Linux系统上无需额外安装依赖即可运行。关键实现点包括使用curl进行文件传输测试通过ping和awk处理延迟数据利用date命令记录测试时间输出格式化为易读的表格形式#!/bin/bash # 测试服务器配置 SERVER_LIST( speedtest1.example.com speedtest2.example.com speedtest3.example.com ) # 测试文件大小(单位:MB) TEST_FILE_SIZE103. 完整脚本代码解析3.1 初始化设置脚本开头定义了一些可配置参数#!/bin/bash # 配置部分 TIMEOUT10 # 单个测试超时时间(秒) TEST_TIMES3 # 每个服务器测试次数 LOG_FILE./speedtest_$(date %Y%m%d).log # 日志文件3.2 延迟测试实现延迟测试使用ping命令取三次测试的平均值function test_latency() { local server$1 local total0 local count0 for ((i1; i$TEST_TIMES; i)); do local result$(ping -c 1 -W $TIMEOUT $server | grep time | awk -Ftime {print $2} | awk {print $1}) if [ -n $result ]; then total$(echo $total $result | bc) count$((count 1)) fi done if [ $count -gt 0 ]; then echo scale2; $total / $count | bc else echo 0 fi }3.3 下载速度测试下载测试使用curl测量下载指定测试文件所需时间function test_download() { local server$1 local urlhttp://$server/testfile_${TEST_FILE_SIZE}mb.bin local start_time$(date %s.%N) curl -o /dev/null --silent --max-time $TIMEOUT $url local end_time$(date %s.%N) local duration$(echo $end_time - $start_time | bc) if (( $(echo $duration 0 | bc -l) )); then echo scale2; $TEST_FILE_SIZE * 8 / $duration | bc else echo 0 fi }4. 测试结果分析与可视化4.1 结果输出格式脚本会将测试结果格式化为易读的表格------------------------------------------------- | Server | Latency| Download | Upload | | | (ms) | (Mbps) | (Mbps) | ------------------------------------------------- | speedtest1.example | 23.45 | 95.67 | 42.31 | | speedtest2.example | 45.67 | 78.90 | 35.12 | -------------------------------------------------4.2 日志记录功能每次测试结果会自动追加到日志文件中方便长期监测网络质量function log_result() { local server$1 local latency$2 local download$3 local upload$4 echo $(date %Y-%m-%d %H:%M:%S),$server,$latency,$download,$upload $LOG_FILE }5. 实际使用技巧5.1 定时自动测试通过crontab设置定时任务比如每小时测试一次0 * * * * /path/to/speedtest.sh /dev/null 215.2 测试服务器选择建议根据我的经验选择测试服务器时要注意地理位置选择距离实际使用地点较近的服务器运营商匹配尽量选择与本地网络相同的运营商服务器服务器负载避免选择已知的高负载服务器5.3 常见问题排查问题1测试结果明显低于预期检查是否有其他程序占用带宽尝试更换测试服务器检查本地网络设备路由器、网线等问题2脚本执行报错确保curl和ping命令可用检查脚本是否有执行权限chmod x speedtest.sh确认测试服务器地址正确6. 脚本优化方向在实际使用中我发现还可以做以下改进多线程测试同时测试多个服务器减少总测试时间网络质量评分根据延迟、抖动、丢包率计算综合质量分数异常报警当网络质量低于阈值时发送通知图形化界面使用dialog库创建简单的TUI界面一个进阶版的网络质量评分函数示例function calculate_score() { local latency$1 local download$2 local upload$3 # 延迟分数(ms): 50100, 50-10080, 100-20060, 20040 if (( $(echo $latency 50 | bc -l) )); then local latency_score100 elif (( $(echo $latency 100 | bc -l) )); then local latency_score80 elif (( $(echo $latency 200 | bc -l) )); then local latency_score60 else local latency_score40 fi # 综合评分 echo scale0; ($latency_score * 0.6 $download * 0.2 $upload * 0.2) | bc }这个脚本我已经在实际工作中使用了两年多帮助排查了数十次网络问题。特别是在远程办公场景下它能快速定位是本地网络问题还是远程服务器问题。对于开发者来说这样的工具应该成为工具箱中的常备项。

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价 →
↑