减去日期&从当前日期开始的时间& bash中的时间

时间:2016-06-18 11:36:20

标签: bash

让我说我有两个变量。

!#/bin/bash
MEMFILE=lock-file
date +%s > $MEMFILE
sleep 130
UPTIME= `date +%s`

我想在几分钟和几秒内获取($ UPTIME - $ MEMFILE)的输出。

例如:

 "Total downtime was 2 minutes and 5 seconds"

1 个答案:

答案 0 :(得分:0)

几种可能性:

减去从date获得的时间:

#!/bin/bash

startdate=$(date +%s)
sleep 130
enddate=$(date +%s)
timetaken=$((enddate-startdate))
printf 'Total downtime was %d minutes and %d seconds\n' "$((timetaken/60))" "$((timetaken%60))"

没有外部进程date(自Bash 4.2以来):

#!/bin/bash

printf -v startdate '%(%s)T' -1
sleep 130
printf -v enddate '%(%s)T' -1
timetaken=$((enddate-startdate))
printf 'Total downtime was %d minutes and %d seconds\n' "$((timetaken/60))" "$((timetaken%60))"

减去时间并计算分钟和秒数是使用arithmetic expansion完成的。

使用Bash's SECONDS variable(可能最适合您):

#!/bin/bash

SECONDS=0 # reset the SECONDS variable
sleep 130
timetaken=$SECONDS
printf 'Total downtime was %d minutes and %d seconds\n' "$((timetaken/60))" "$((timetaken%60))"

设置为整数值后,特殊变量SECONDS每秒递增一次。

将Bash的time关键字与适当的TIMEFORMAT一起使用(在这里,我们无法将已用时间写为 MM分钟和SS秒;它将以MmSs的形式显示,即总停机时间为2分10秒

#!/bin/bash

TIMEFORMAT='Total downtime was %0lR'

time {
    # do your stuff in this block
    sleep 130
}

请注意,linked answer已包含大量素材。