bash 脚本比较 100 个程序运行时间,精确到毫秒,脚本

脚本如下:

bash 复制代码
#!/bin/bash

# 设置测试次数
NUM_TESTS=100
# 设置要测试的程序路径
PROGRAM="./your_program"  # 替换为你的程序路径
# 设置程序参数(如果没有参数则留空)
ARGS=""  # 例如: "input.txt output.txt"

# 初始化统计变量
total_time=0
min_time=999999.99
max_time=0

echo "开始测试 $PROGRAM,共 $NUM_TESTS 次运行..."

# 创建结果文件
result_file="timing_results_$(date +%Y%m%d_%H%M%S).csv"
echo "运行次数,时间(秒)" > "$result_file"

for ((i=1; i<=$NUM_TESTS; i++))
do
    # 使用time命令计时,精度到毫秒
    start_time=$(date +%s.%3N)
    
    # 运行程序(后台运行,捕获输出和错误)
    $PROGRAM $ARGS > /dev/null 2>&1
    
    end_time=$(date +%s.%3N)
    
    # 计算耗时(秒,保留3位小数后四舍五入到2位)
    elapsed=$(echo "scale=3; $end_time - $start_time" | bc)
    elapsed=$(printf "%.2f" $elapsed)
    
    # 更新统计信息
    total_time=$(echo "scale=2; $total_time + $elapsed" | bc)
    
    # 比较并更新最小时间(使用awk处理浮点数比较)
    if (( $(echo "$elapsed < $min_time" | bc -l) )); then
        min_time=$elapsed
    fi
    
    # 比较并更新最大时间
    if (( $(echo "$elapsed > $max_time" | bc -l) )); then
        max_time=$elapsed
    fi
    
    # 输出当前结果并写入文件
    echo "第 $i 次: $elapsed 秒"
    echo "$i,$elapsed" >> "$result_file"
done

# 计算平均值
average_time=$(echo "scale=2; $total_time / $NUM_TESTS" | bc)

echo ""
echo "============= 测试结果 ============="
echo "测试程序: $PROGRAM $ARGS"
echo "测试次数: $NUM_TESTS"
echo "总耗时: $total_time 秒"
echo "平均时间: $average_time 秒"
echo "最短时间: $min_time 秒"
echo "最长时间: $max_time 秒"
echo ""
echo "详细结果已保存到: $result_file"
相关推荐
lly2024065 分钟前
CSS3 多媒体查询
开发语言
天***88961 小时前
js封装一个双精度算法实现
开发语言·前端·javascript
惘嘫、冋渞1 小时前
CentOS 7 下 Nginx 编译后热重启方案
chrome·nginx·centos
.小小陈.1 小时前
数据结构2:单链表
c语言·开发语言·数据结构·笔记·学习方法
Camel卡蒙1 小时前
数据结构——二叉搜索树Binary Search Tree(介绍、Java实现增删查改、中序遍历等)
java·开发语言·数据结构
Algebraaaaa1 小时前
什么是前端、后端与全栈开发,Qt属于什么?
开发语言·前端·qt
立志成为大牛的小牛1 小时前
数据结构——二十三、并查集的终极优化(王道408)
开发语言·数据结构·笔记·学习·程序人生·考研
纵有疾風起2 小时前
C++模版:模板初阶及STL简介
开发语言·c++·经验分享·开源
QT 小鲜肉2 小时前
【个人成长笔记】Qt Creator快捷键终极指南:从入门到精通
开发语言·c++·笔记·qt·学习·学习方法
子豪-中国机器人2 小时前
《C++ STL 基础入门》教案
java·开发语言