前言

本篇文章主要记录使用Shell脚本实现一个命令执行计时器的函数。

准备

使用命令 学习链接
echo 学习链接
date 学习链接
expr 学习链接

开始

具体代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
function Timer(){
# 使用 local 定义变量 防止污染脚本变量
local StartTime=$(date +%s%N)
local EndTime
local DiffSeconds
local DiffMS

# 执行传入命令 并输出结果
command=$@
${command}

# 计算时间
EndTime=$(date +%s%N)
DiffSeconds=$(( (EndTime / 1000000000) - (StartTime / 1000000000) ))
if (( $(( (EndTime % 1000000000) - (StartTime % 1000000000) )) < 0 ))
then
DiffMS=$(( (StartTime % 1000000000) - (EndTime % 1000000000) ))
else
DiffMS=$(( (EndTime % 1000000000) - (StartTime % 1000000000) ))
fi
DiffMS=$(( DiffMS / 1000000 ))
TotalSeconds=$(( DiffSeconds + (DiffMS / 1000) ))
TotalMS=$(( DiffMS % 1000 ))

# 防止时间为负数
if (( ${TotalMS} < 0))
then
TotalSeconds=$(expr ${TotalSeconds} - 1)
DiffMS=$(expr DiffMS + 1000)
TotalMS=$(( DiffMS % 1000 ))
fi

# 输出时间
echo "${TotalSeconds}.${TotalMS}s" | sed 's/-//g'
}

使用范例

1
2
3
4
5
6
7
8
9
root@localhost:~# Timer pnpm list -g
Legend: production dependency, optional only, dev only

/root/.local/share/pnpm/global/5

dependencies:
ArcticFox 5.20
1.93s
root@localhost:~#