本文目录导读:

在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}"
使用建议
- 简单脚本:使用
time命令即可 - 需要精确计时:使用
date +%s%N获取纳秒级时间 - 需要多次计时:封装成函数重复使用
- 性能监控:可以记录每个步骤的耗时
- 调试临时用:直接添加
time命令前缀
选择哪种方式主要看你的具体需求,简单的脚本用 time 命令最方便,复杂的脚本建议使用封装好的函数。