在脚本中测量时间


8

此线程显示了如何测量运行脚本所花费的时间。就我而言,我有兴趣测量脚本中两点之间的时间 。这是我想如何使用此示例:

start_measuring_time
Line 1
Line 2
..
Line N
stop_measuring_time
show_elapsed_time

我希望显示的时间是人类可读的(秒,分钟,小时,天等),如果可能的话。任何想法如何做到这一点?

Answers:


7

您可以使用dateutil:

#!/bin/bash

start_measuring_time() {
  read s1 s2 < <(date +'%s %N')
}

stop_measuring_time() {
  read e1 e2 < <(date +'%s %N')
}

show_elapsed_time() {
  echo "$((e1-s1)) seconds, $((e2-s2)) nanoseconds"
}

start_measuring_time
sleep 2
stop_measuring_time
show_elapsed_time

这会产生错误:开始和结束需要的时间将被解释为秒+纳秒在一起,没有分开-你可以得到的东西像负值,否则。
rozcietrzewiacz 2011年

1
请参阅我对这个问题的回答,以解决此问题。
rozcietrzewiacz 2011年

我因为它不是comletely正确答案downvote,改正它,有时却在你的问题,你为什么不把前回声给人负值Tend-Tstart$(
munish

11

您可以使用time

time (
Line 1
Line 2
..
Line N
)

我认为时间的输出按原样是人类可读的,但是如果您的脚本要以天为单位等,那么请查看输出man time的格式选项。


谢谢@frabjous!我想我会接受@enzotib的回答,因为它允许我在常规控制流(即不仅是线性流)中测量时间。
Amelio Vazquez-Reina

1

尝试timerscript.sh的示例:

#!/bin/bash

#timing in minutes with %m
start=`date +%m`
echo 'Start:' $start
#do something e.g. wait for 1.30 minutes 
sleep 90

`end=`date +%m`
echo 'End: '$end
echo 'runtime: '$runtime
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.