以下是一个功能强大的Linux一键测速脚本 SuperBench.sh
的解析和优化版本,包含基础测试、网络测速、磁盘IO测试等功能:
#!/bin/bash
# SuperBench.sh - Linux System Performance Benchmark Script
# Author: AI Assistant (optimized version)
# Original: Oldking (https://www.oldking.net/350.html)
# 颜色定义
RED='\033[31m'
GREEN='\033[32m'
YELLOW='\033[33m'
BLUE='\033[34m'
RESET='\033[0m'
BOLD='\033[1m'
# 全局变量
VER="2024-01-20"
IP_API=("ip.sb" "ipinfo.io" "ifconfig.me")
IPV4_CHECK_API="https://api.ipify.org"
IPV6_CHECK_API="https://api6.ipify.org"
# 检查root权限
check_root(){
if [[ $EUID -ne 0 ]]; then
echo -e "${RED}错误:本脚本需要root权限才能运行${RESET}"
exit 1
fi
}
# 系统信息检测
sys_info(){
echo -e "${BOLD}\n===== 系统信息 =====${RESET}"
# 获取主机名
hostname=$(hostname)
# 获取操作系统信息
if [ -f /etc/os-release ]; then
os_name=$(grep PRETTY_NAME /etc/os-release | cut -d'"' -f2)
elif [ -f /etc/redhat-release ]; then
os_name=$(cat /etc/redhat-release)
else
os_name=$(uname -o)
fi
# 获取内核版本
kernel=$(uname -r)
# 获取CPU信息
cpu_model=$(grep "model name" /proc/cpuinfo | head -n1 | awk -F: '{print $2}' | sed 's/^[ \t]*//')
cpu_cores=$(grep -c "processor" /proc/cpuinfo)
# 获取内存信息
mem_total=$(free -m | awk '/Mem:/ {print $2}')
# 获取虚拟化类型
if [ -f /proc/cpuinfo ]; then
virtualization=$(grep -E "vmx|svm" /proc/cpuinfo > /dev/null && echo "KVM" || \
(dmesg | grep -i hypervisor > /dev/null && echo $(dmesg | grep -i hypervisor | head -1 | awk '{print $3}') || echo "Physical"))
else
virtualization="Unknown"
fi
# 输出系统信息
echo -e "主机名 : ${BLUE}$hostname${RESET}"
echo -e "操作系统 : ${BLUE}$os_name${RESET}"
echo -e "内核版本 : ${BLUE}$kernel${RESET}"
echo -e "CPU型号 : ${BLUE}$cpu_model${RESET}"
echo -e "CPU核心数 : ${BLUE}$cpu_cores${RESET}"
echo -e "内存大小 : ${BLUE}${mem_total}MB${RESET}"
echo -e "虚拟化类型: ${BLUE}$virtualization${RESET}"
}
# 网络信息检测
net_info(){
echo -e "${BOLD}\n===== 网络信息 =====${RESET}"
# 获取IP地址
ipv4=$(curl -s4 $IPV4_CHECK_API)
ipv6=$(curl -s6 $IPV6_CHECK_API)
# 获取ASN和ISP信息
asn_info=$(curl -s https://ipinfo.io/$ipv4/org)
# 获取地理位置
country=$(curl -s https://ipinfo.io/$ipv4/country)
city=$(curl -s https://ipinfo.io/$ipv4/city)
echo -e "IPv4地址 : ${BLUE}$ipv4${RESET}"
[[ -n "$ipv6" ]] && echo -e "IPv6地址 : ${BLUE}$ipv6${RESET}"
echo -e "ASN/ISP : ${BLUE}$asn_info${RESET}"
echo -e "地理位置 : ${BLUE}$country, $city${RESET}"
}
# 磁盘性能测试
disk_test(){
echo -e "${BOLD}\n===== 磁盘I/O测试 =====${RESET}"
# 检查是否有写入权限
if ! touch /tmp/superbench_io_test 2>/dev/null; then
echo -e "${RED}错误:没有写入权限,跳过磁盘测试${RESET}"
return
fi
rm -f /tmp/superbench_io_test
# 测试目录选择
test_dir="/tmp"
[ -d "/home" ] && test_dir="/home"
# 执行DD测试
echo -e "测试目录: ${BLUE}$test_dir${RESET}"
echo -e "${YELLOW}测试写入速度...${RESET}"
io_write=$(dd if=/dev/zero of=$test_dir/superbench_io_test bs=1M count=512 conv=fdatasync 2>&1 | awk '/copied/ {print $(NF-1)" "$NF}')
echo -e "${YELLOW}测试读取速度...${RESET}"
io_read=$(dd if=$test_dir/superbench_io_test of=/dev/null bs=1M count=512 2>&1 | awk '/copied/ {print $(NF-1)" "$NF}')
# 清理测试文件
rm -f $test_dir/superbench_io_test
echo -e "写入速度: ${GREEN}$io_write${RESET}"
echo -e "读取速度: ${GREEN}$io_read${RESET}"
}
# 网络速度测试
speed_test(){
echo -e "${BOLD}\n===== 网络速度测试 =====${RESET}"
# 检查curl是否存在
if ! command -v curl &> /dev/null; then
echo -e "${RED}错误:curl未安装,无法进行网络测试${RESET}"
return
fi
# 测试服务器列表
servers=(
"http://speedtest.newark.linode.com/100MB-newark.bin"
"http://speedtest.singapore.linode.com/100MB-singapore.bin"
"http://speedtest.london.linode.com/100MB-london.bin"
)
for server in "${servers[@]}"; do
domain=$(echo $server | awk -F/ '{print $3}')
echo -e "\n测试服务器: ${BLUE}$domain${RESET}"
# 计算下载速度
speed=$(curl -o /dev/null -w "%{speed_download}" -s "$server" | awk '{printf("%.2f MB/s", $1/1048576)}')
echo -e "下载速度: ${GREEN}$speed${RESET}"
done
}
# 综合性能测试
bench_all(){
check_root
clear
echo -e "${BOLD}${GREEN}SuperBench.sh v$VER - Linux性能测试脚本${RESET}"
echo -e "${BOLD}${YELLOW}开始全面测试...${RESET}"
# 执行所有测试
sys_info
net_info
disk_test
speed_test
echo -e "${BOLD}${GREEN}\n所有测试完成!${RESET}"
}
# 显示帮助信息
usage(){
echo -e "${BOLD}SuperBench.sh 使用说明${RESET}"
echo -e "版本: v$VER"
echo -e "用法: $0 [选项]"
echo -e "选项:"
echo -e " -a, --all 执行全面测试 (默认)"
echo -e " -s, --system 只测试系统信息"
echo -e " -n, --network 只测试网络信息"
echo -e " -d, --disk 只测试磁盘性能"
echo -e " -p, --speed 只测试网络速度"
echo -e " -h, --help 显示帮助信息"
}
# 主函数
main(){
case $1 in
"-a"|"--all")
bench_all
;;
"-s"|"--system")
sys_info
;;
"-n"|"--network")
net_info
;;
"-d"|"--disk")
disk_test
;;
"-p"|"--speed")
speed_test
;;
"-h"|"--help")
usage
;;
*)
bench_all
;;
esac
}
main "$@"
系统信息检测:
网络信息检测:
磁盘性能测试:
网络速度测试:
模块化设计:
# 赋予执行权限
chmod +x SuperBench.sh
# 完整测试
./SuperBench.sh -a 或 ./SuperBench.sh
# 单独测试
./SuperBench.sh -s # 只测试系统信息
./SuperBench.sh -n # 只测试网络信息
./SuperBench.sh -d # 只测试磁盘性能
./SuperBench.sh -p # 只测试网络速度
您可以根据需要修改测试服务器列表或添加更多测试项目。