Bash中如何对date +%H:%M:%S格式的时间做减法求差值
错误原因
你使用date +%H:%M:%S获取的是带冒号的时间字符串(格式示例:15:23:47),不属于可直接参与算术运算的整数类型,因此直接做减法会报错。
秒级计时实现(最简单方案)
使用date +%s获取Unix时间戳(自1970年1月1日0点的总秒数,纯整数),可直接做差值计算:
start_code=$(date +%s) for i in {1..1000}; do echo $RANDOM >> filename.txt; done end_code=$(date +%s) # 计算耗时 total_code=$(( end_code - start_code )) echo "运行总耗时:${total_code} 秒"
高精度计时(支持毫秒/微秒级)
如果需要更细粒度的耗时统计,可结合纳秒时间戳和bc工具做小数运算:
# %s是总秒数,%N是当前秒的纳秒数 start_code=$(date +%s.%N) for i in {1..1000}; do echo $RANDOM >> filename.txt; done end_code=$(date +%s.%N) # scale=3表示保留3位小数,即毫秒级精度,Ubuntu默认自带bc工具 total_code=$(echo "scale=3; $end_code - $start_code" | bc) echo "运行总耗时:${total_code} 秒"
可选简化方案
如果只是临时测试脚本耗时,不需要在脚本内输出耗时,可直接调用内置time命令运行脚本:
time bash your_script.sh
运行后会自动输出三类耗时:
- real:脚本实际运行的挂钟时间
- user:CPU在用户态执行脚本的时间
- sys:CPU在内核态执行脚本的时间
内容的提问来源于stack exchange,提问作者Mr.Mongo
相关产品推荐
相关产品推荐

