Shell脚本如何显示执行耗时统计

wen 实用脚本 1

本文目录导读:

Shell脚本如何显示执行耗时统计

  1. 使用 time 命令(最简单)
  2. 使用内置变量 SECONDS
  3. 使用 date 命令(精确到毫秒)
  4. 封装成函数(推荐)
  5. 多个阶段的耗时统计
  6. 使用 trap 自动统计(高级)
  7. 格式化输出(带颜色)
  8. 使用建议

在Shell脚本中显示执行耗时统计,有几种常用的方法:

使用 time 命令(最简单)

测量单个命令

time your_command

测量整个脚本

time ./your_script.sh

输出示例:

real    0m2.345s
user    0m1.234s
sys     0m0.567s

使用内置变量 SECONDS

#!/bin/bash
# 记录开始时间
SECONDS=0
# 你的脚本内容
echo "开始执行..."
sleep 2
echo "继续执行..."
sleep 1
# 计算耗时
duration=$SECONDS
echo "总耗时: $((duration / 60)) 分 $((duration % 60)) 秒"

使用 date 命令(精确到毫秒)

#!/bin/bash
# 记录开始时间
start_time=$(date +%s%N)
# 你的脚本内容
echo "开始执行..."
sleep 2
echo "继续执行..."
sleep 1
# 计算耗时
end_time=$(date +%s%N)
elapsed=$(( ($end_time - $start_time) / 1000000 ))  # 转换为毫秒
echo "总耗时: $elapsed 毫秒"

封装成函数(推荐)

#!/bin/bash
# 计时函数
timer_start() {
    timer_start_time=$(date +%s%N)
    echo "开始计时..."
}
timer_end() {
    local end_time=$(date +%s%N)
    local elapsed=$(( ($end_time - $timer_start_time) / 1000000 ))
    local seconds=$((elapsed / 1000))
    local milliseconds=$((elapsed % 1000))
    if [ $seconds -ge 60 ]; then
        local minutes=$((seconds / 60))
        local secs=$((seconds % 60))
        echo "耗时: ${minutes}分${secs}.${milliseconds}秒"
    else
        echo "耗时: ${seconds}.${milliseconds}秒"
    fi
}
# 使用示例
timer_start
# 你的脚本逻辑
echo "执行任务1..."
sleep 2
echo "执行任务2..."
sleep 1
timer_end

多个阶段的耗时统计

#!/bin/bash
log_time() {
    local current=$(date +%s%N)
    local elapsed=$(( ($current - $start_time) / 1000000 ))
    local seconds=$((elapsed / 1000))
    local milliseconds=$((elapsed % 1000))
    echo "[${seconds}.${milliseconds}s] $1"
}
start_time=$(date +%s%N)
echo "开始执行..."
log_time "脚本启动"
sleep 1
log_time "任务1完成"
sleep 2
log_time "任务2完成"
sleep 0.5
log_time "脚本结束"

使用 trap 自动统计(高级)

#!/bin/bash
# 自动计时器
auto_timer() {
    local end=$(date +%s%N)
    local elapsed=$(( ($end - $start_time) / 1000000 ))
    local seconds=$((elapsed / 1000))
    echo ""
    echo "脚本执行完毕,总耗时: ${seconds}秒"
}
start_time=$(date +%s%N)
trap auto_timer EXIT
echo "开始执行..."
sleep 2
echo "正在处理..."
sleep 1
echo "处理完成"

格式化输出(带颜色)

#!/bin/bash
# 颜色定义
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
NC='\033[0m' # No Color
start_time=$(date +%s%N)
echo "开始执行..."
# 你的脚本逻辑
for i in {1..3}; do
    sleep 1
    echo -e "${YELLOW}步骤 $i 完成${NC}"
done
# 计算并显示耗时
end_time=$(date +%s%N)
elapsed=$(( ($end_time - $start_time) / 1000000 ))
seconds=$((elapsed / 1000))
milliseconds=$((elapsed % 1000))
echo -e "${GREEN}================================${NC}"
echo -e "${GREEN}总耗时: ${seconds}.${milliseconds} 秒${NC}"
echo -e "${GREEN}================================${NC}"

使用建议

  1. 简单脚本:使用 time 命令即可
  2. 需要精确计时:使用 date +%s%N 获取纳秒级时间
  3. 需要多次计时:封装成函数重复使用
  4. 性能监控:可以记录每个步骤的耗时
  5. 调试临时用:直接添加 time 命令前缀

选择哪种方式主要看你的具体需求,简单的脚本用 time 命令最方便,复杂的脚本建议使用封装好的函数。

抱歉,评论功能暂时关闭!