获取 bash 中经过的时间

获取 bash 中经过的时间

我想在脚本中的某一时刻执行以下操作:

start_time=date

在一个或多个进程运行之后:

end_time=date

然后这样做:

elapsed=$end_time-$start_time
echo "Total of $elapsed seconds elapsed for process"

我该怎么做?

答案1

使用纪元以来的时间轻松识别脚本中的时间跨度

man date
%s     seconds since 1970-01-01 00:00:00 UTC
%N     nanoseconds (000000000..999999999)

start_time="$(date -u +%s)"
sleep 5
end_time="$(date -u +%s)"

elapsed="$(($end_time-$start_time))"
echo "Total of $elapsed seconds elapsed for process"

 Total of 5 seconds elapsed for process

Bash 不支持浮点数,因此您需要使用像 bc 这样的外部工具来比较时间,例如1475705058.042270582-1475705053.040524971

start_time="$(date -u +%s.%N)"
sleep 5
end_time="$(date -u +%s.%N)"

elapsed="$(bc <<<"$end_time-$start_time")"
echo "Total of $elapsed seconds elapsed for process"

 Total of 5.001884264 seconds elapsed for process

答案2

bash 有一个内置定时器变量

start=$SECONDS
# do stuff
end=$SECONDS
duration=$(( end - start ))
echo "stuff took $duration seconds to complete"

答案3

@jasonwryan 已经建议了,但我会把它作为答案,因为当我想为脚本计时时,它也是我的首选。到时间脚本只需使用:

time myscript

答案4

当你测量可能需要很长时间的东西时,以秒为单位阅读答案是非常烦人的。您确实希望得到正确的答案格式(如hh:mm:ss),而无需扭曲计算。使用date自己的功能,如下所示:

# Using differences, and give result in hh:mm:ss
S=0; E=121; TT=$((E-S)); date -u -d "@${TT}" +%T
# 00:02:01

# Using date differences, and give result in hh:mm:ss
S=$(date -u +"%s"); E=$((S+121)); TT=$((E-S)); date -u -d "@${TT}" +%T
# 00:02:01

相关内容