大势趋007

每个人都是🏆
  新随笔  :: 管理

CPU 测试脚本

Posted on 2025-09-28 18:23  大势趋007  阅读(11)  评论(1)    收藏  举报
#!/bin/bash

# 冒泡排序算法测试 - CPU负载测试
# 兼容旧版本Bash

bubble_sort() {
    local array_name=$1
    eval "local array=(\"\${${array_name}[@]}\")"
    local n=${#array[@]}
    
    for ((i = 0; i < n-1; i++)); do
        for ((j = 0; j < n-i-1; j++)); do
            if [ ${array[j]} -gt ${array[j+1]} ]; then
                # 交换元素
                local temp=${array[j]}
                array[j]=${array[j+1]}
                array[j+1]=$temp
            fi
        done
    done
    
    # 将排序后的数组赋值回原变量
    eval "${array_name}=(\"\${array[@]}\")"
}

# 生成随机数组
generate_random_array() {
    local size=$1
    local array=()
    
    for ((i=0; i<size; i++)); do
        array[i]=$((RANDOM % 10000))
    done
    
    # 返回数组元素
    echo "${array[@]}"
}

# 主测试函数
run_test() {
    local array_size=${1:-1000}  # 默认数组大小,降低以避免过长时间
    local iterations=${2:-5}     # 默认迭代次数
    
    echo "=== Bash冒泡排序CPU负载测试 ==="
    echo "数组大小: $array_size"
    echo "迭代次数: $iterations"
    echo "开始时间: $(date)"
    echo "--------------------------------"
    
    local total_time=0
    
    for ((iter=1; iter<=iterations; iter++)); do
        echo -n "第 $iter 次迭代..."
        
        # 生成新数组
        local test_array
        test_array=($(generate_random_array $array_size))
        
        # 计时开始
        local start_time=$(date +%s)
        
        # 执行排序
        bubble_sort test_array
        
        # 计时结束
        local end_time=$(date +%s)
        local duration=$((end_time - start_time))
        
        echo " 完成 - 耗时: ${duration}秒"
        total_time=$((total_time + duration))
        
        # 小延迟,避免过热
        sleep 1
    done
    
    echo "--------------------------------"
    echo "总耗时: ${total_time}秒"
    echo "平均耗时: $((total_time / iterations))秒"
    echo "结束时间: $(date)"
    echo "测试完成!"
}

# 极简版本 - 如果上述仍有问题
simple_bubble_test() {
    echo "=== 极简冒泡排序测试 ==="
    echo "开始时间: $(date)"
    
    # 创建一个小数组进行测试
    arr=(5 3 8 4 2 9 1 7 6)
    echo "原始数组: ${arr[@]}"
    
    # 冒泡排序
    n=${#arr[@]}
    for ((i = 0; i < n-1; i++)); do
        for ((j = 0; j < n-i-1; j++)); do
            if [ ${arr[j]} -gt ${arr[j+1]} ]; then
                temp=${arr[j]}
                arr[j]=${arr[j+1]}
                arr[j+1]=$temp
            fi
        done
    done
    
    echo "排序后数组: ${arr[@]}"
    echo "结束时间: $(date)"
}

# 检查Bash版本
check_bash_version() {
    local bash_version=${BASH_VERSION%%[^0-9.]*}
    echo "当前Bash版本: $bash_version"
    
    if [ $(echo "$bash_version >= 4.3" | bc -l 2>/dev/null) -eq 1 ]; then
        echo "Bash版本支持高级特性"
        return 0
    else
        echo "Bash版本较旧,使用兼容模式"
        return 1
    fi
}

# 显示使用信息
show_usage() {
    echo "用法: $0 [选项]"
    echo "选项:"
    echo "  normal [大小] [次数]  正常测试模式"
    echo "  simple                极简测试模式"
    echo "  check                 检查Bash版本"
    echo "  help                  显示此帮助"
    echo ""
    echo "示例:"
    echo "  $0 normal 500 3       # 500元素, 3次迭代"
    echo "  $0 simple             # 极简测试"
}

# 主程序
main() {
    case "$1" in
        "normal")
            if check_bash_version; then
                run_test "$2" "$3"
            else
                # 如果版本检查失败,使用更保守的参数
                run_test "${2:-500}" "${3:-3}"
            fi
            ;;
        "simple")
            simple_bubble_test
            ;;
        "check")
            check_bash_version
            ;;
        "help"|"-h"|"--help")
            show_usage
            ;;
        *)
            echo "使用默认参数运行测试..."
            if check_bash_version; then
                run_test
            else
                run_test 500 3
            fi
            ;;
    esac
}

# 运行主程序
main "$@"

5add02c3-c5fa-4a91-ad07-8066f477f2bf