请求修改curl脚本:转换time_total为毫秒、size_download为KB并输出平均响应毫秒值
修改后的脚本
# 创建临时文件存储原始响应时间,避免管道字段解析混乱 temp_time=$(mktemp) for ((i=1;i<=50;i++)); do # 用结构化格式捕获curl的元数据,方便后续解析 curl_meta=$(curl -w 'http_code:%{http_code};size:%{size_download};time:%{time_total}' \ "https://www.google.com" -m 2 -o /dev/null -s) # 解析各个字段 http_code=$(echo "$curl_meta" | awk -F';' '{split($1, arr, ":"); print arr[2]}') raw_size=$(echo "$curl_meta" | awk -F';' '{split($2, arr, ":"); print arr[2]}') raw_time=$(echo "$curl_meta" | awk -F';' '{split($3, arr, ":"); print arr[2]}') # 单位转换:字节转KB(保留2位小数),秒转毫秒(保留2位小数) size_kb=$(echo "scale=2; $raw_size / 1024" | bc) time_ms=$(echo "scale=2; $raw_time * 1000" | bc) # 输出格式化后的结果到终端 echo "Return Code: $http_code; Bytes Received: $size_kb KB; Response Time: $time_ms ms" # 将原始响应时间写入临时文件,用于计算平均 echo "$raw_time" >> "$temp_time" done # 计算并输出平均响应时间(转换为毫秒,保留2位小数) average_time=$(awk '{sum += $1; count++} END {print sum / count}' "$temp_time") average_ms=$(echo "scale=2; $average_time * 1000" | bc) echo "Average Response Time = $average_ms ms" # 清理临时文件 rm "$temp_time"
关键修改说明
- 结构化元数据捕获:把curl的
-w输出改成http_code:%{http_code};size:%{size_download};time:%{time_total},避免空格分隔导致的字段索引混乱,后续用awk按分号拆分解析更可靠。 - 单位转换:
- 用
bc工具做浮点运算,scale=2确保结果保留2位小数,size_download除以1024转成KB,time_total乘以1000转成毫秒。
- 用
- 平均计算:用临时文件存储每次的原始响应时间(秒),最后求和取平均后再转成毫秒,避免多次转换带来的精度损失。
- 临时文件清理:脚本结束后自动删除临时文件,避免残留垃圾文件。
内容的提问来源于stack exchange,提问作者Waddah Shamroukh
相关产品推荐
相关产品推荐

