如何在Linux的Shell脚本中获取脚本执行时间

时间:2020-01-09 10:38:44  来源:igfitidea点击:

使用bash脚本以分钟为单位找出运行时间。

Bash脚本执行时间。
在shell脚本中获取脚本执行时间。
如何在Unix中获得命令执行时间。
bash脚本的开始结束时间。
如何在Unix中计算脚本执行时间。
bash获取命令执行时间。

这个问题有两个部分。

  • 从外部获取脚本执行时间或者命令执行时间

  • 在内部获取脚本执行时间

从外部获取脚本执行时间

我们可以使用"time"命令来获取脚本的执行时间。
该命令将调用Tcl解释器的计数时间来评估脚本(如果未指定count,则计算一次)。
然后,它将返回每次迭代形式为503微秒的字符串,该字符串指示每次迭代所需的平均时间(以微秒为单位)。

# time /tmp/script.sh
Script Execution Time: 5.00 seconds
real 0m5.015s
user 0m0.005s
sys 0m0.014s

其中"实际"或者总计或者已用时间(挂钟时间)是从通话开始到结束的时间。
这是从我们按下Enter键到脚本执行完成的时间。
"用户"在用户模式下花费的CPU时间。
在内核模式下花费的"系统或者系统" CPU时间量。

获取命令执行时间

使用以下格式的time命令来获取命令执行时间。
在执行结束时,time命令将为我们提供执行时间值。
我们可以进一步向awl/grep/sed用户获取所需的详细信息。

# time rpm -Uvh /export/home/iserver/linux/install/Linux/rhel7_64/Packages/atk-2.22.0-3.el7.x86_64.rpm
Preparing...                          ################################# [100%]
Updating/installing...
   1:atk-2.22.0-3.el7                 ################################# [100%]
real 0m0.104s
user 0m0.077s
sys 0m0.027s

输出与上面说明的相同。

在内部获取脚本执行时间

由于time命令只能从外部调用,因此这里比较棘手,但是如果我们希望从脚本内部获取脚本执行时间,则必须在脚本中放置一些函数。

下面,我创建了一个虚拟脚本来内部测量脚本执行时间

#!/bin/bash
# This should be at the top of the script to get the start time of the script
start=$(date +%s.%N)
# Here you can place your function
sleep 5
duration=$(echo "$(date +%s.%N) - $start" | bc)
execution_time=`printf "%.2f seconds" $duration`
echo "Script Execution Time: $execution_time"

让我们执行脚本

# /tmp/script.sh
Script Execution Time: 5.00 seconds

因此,我们的脚本运行了5秒钟。

但这不是一个非常可靠的解决方案,因为如果脚本突然退出,那么脚本将无法打印执行时间。
因此,我们必须采取一些额外的措施,以确保脚本在任何情况下都可以确保脚本的持续时间。

但这会因脚本而异,因此我无法在此进行预测。

我们可以编写一些退出功能,例如

# This should be at the top of the script to get the start time of the script
start=$(date +%s.%N)
function exit_with_error {
duration=$(echo "$(date +%s.%N) - $start" | bc)
execution_time=`printf "%.2f seconds" $duration`
echo "Script Execution Time: $execution_time"
exit 1
}

因此,现在我们可以在所有可能退出脚本的情况下使用exit_with_error函数,以便为所有成功和失败情况正确获得脚本执行时间。