事实上,当我想要估计脚本完成所需的时间时。
startdate=$date
stuffs
enddate=$date
我希望得到这两个日期之间的差异,通常脚本完成时间不到 1 周。所以我需要它的天数和分钟数。
答案1
从bash
手册:
SECONDS
每次引用此参数时,都会返回自 shell 调用以来的秒数。如果将值分配给
SECONDS
,则后续引用时返回的值是自分配以来的秒数加上所分配的值。如果SECONDS
未设置,即使随后重置,它也会失去其特殊属性。
因此,每当您想使用计时秒数的计时器来计时一段代码时,您可以这样做
SECONDS=0
# code goes here
t=$SECONDS
要打印该$t
值的天数和分钟数:
printf 'Time taken: %d days, %d minutes\n' "$(( t/86400 ))" "$(( t/60 - 1440*(t/86400) ))"
答案2
此外:time bash script.sh
答案3
您可以使用时间戳date "+%s"
$ date "+%s"
1590502845
并使用bash$(())
进行计算
START=$(date "+%s")
work ... work... work ...
END=$(date "+%s")
echo $((END-START))
答案4
大多数答案都缺少一种以hh:mm:ss
格式获取时间的简单方法。
让我们保持简单,仅使用 Bash 内置函数:
# Using the Bash built-in SECONDS
SECONDS=0;sleep 0; t=$((SECONDS+241));TT=$(date -u -d "@${t}" +%T); printf 'Time taken: %s\n' "$TT"
# Time taken: 00:04: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