腳本如下:
#!/bin/bash# 設置測試次數
NUM_TESTS=100
# 設置要測試的程序路徑
PROGRAM="./your_program" # 替換為你的程序路徑
# 設置程序參數(如果沒有參數則留空)
ARGS="" # 例如: "input.txt output.txt"# 初始化統計變量
total_time=0
min_time=999999.99
max_time=0echo "開始測試 $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>&1end_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) )); thenmin_time=$elapsedfi# 比較并更新最大時間if (( $(echo "$elapsed > $max_time" | bc -l) )); thenmax_time=$elapsedfi# 輸出當前結果并寫入文件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"