让我说我有两个变量。
!#/bin/bash
MEMFILE=lock-file
date +%s > $MEMFILE
sleep 130
UPTIME= `date +%s`
我想在几分钟和几秒内获取($ UPTIME - $ MEMFILE)的输出。
例如:
"Total downtime was 2 minutes and 5 seconds"
答案 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已包含大量素材。