📜  bash 测量执行时间 - Shell-Bash (1)

📅  最后修改于: 2023-12-03 14:39:29.073000             🧑  作者: Mango

Bash 测量执行时间 - Shell/Bash

在编写 Shell/Bash 脚本时,我们经常需要测量脚本的执行时间。这对于优化脚本性能以及对脚本进行调试都非常有帮助。本文介绍如何在 Bash 中测量脚本的执行时间。

方法一:使用 time 命令

time 命令是 Bash 内置的一个命令,可以测量命令或脚本的执行时间。在 Bash 中执行某个命令或脚本时,可以在命令前加上 time,即可获得该命令/脚本的执行时间。

time command
time script.sh

time 命令会返回三个时间:实际时间(real)、用户时间(user)、系统时间(sys)。其中,实际时间是命令/脚本执行所用的总时间,包括 CPU 时间和 I/O 等待时间;用户时间是指命令/脚本在用户态执行的 CPU 时间;系统时间是指命令/脚本在内核态执行的 CPU 时间。

比如,下面是一个简单的示例,其中 sleep 2 命令会在 2 秒钟后返回:

$ time sleep 2
real	0m2.004s
user	0m0.000s
sys	0m0.004s

在实际应用中,我们也可以将 time 命令与管道符号一起使用,例如:

time ls -l | grep "test" > /dev/null
方法二:使用 date 命令

除了 time 命令外,我们还可以使用 date 命令来测量脚本的执行时间。具体做法是,在脚本的开始和结束处都分别添加一行代码,分别用于获取当前时间戳。两个时间戳的差值即为脚本的执行时间。

#!/bin/bash
start=$(date +%s)   # 获取脚本开始执行的时间戳
# 脚本执行内容
end=$(date +%s)     # 获取脚本结束执行的时间戳
echo "脚本执行时间:$((end-start))秒"   # 输出脚本执行时间

在上述脚本中,变量 $start$end 分别获取脚本开始和结束的时间戳。这里用到了 date 命令的 %s 格式化选项,它会将日期转换为从 1970 年 1 月 1 日 00:00:00 UTC 起到现在的秒数。因此,两个时间戳的差值就是脚本的执行时间(以秒为单位)。

总结

这篇文章介绍了两种测量 Bash 脚本执行时间的方法,它们分别是使用 time 命令和使用 date 命令。前者更为简单,可以直接测量命令或脚本的执行时间,但无法在脚本中使用;后者相对更为灵活,允许我们在脚本中直接获取执行时间,但需要在脚本中编写额外的代码。

无论采用哪种方法,测量脚本执行时间都是优化脚本性能以及进行调试时必不可少的工具。