如何判断跨多个shell脚本的持续时间是否超过一小时?

use*_*440 4 bash

我正在尝试检查运行时间,如果超过一个小时返回错误,但代码间歇性地返回误报。在firstRun.sh,我读时间为:

export START_H=`date +%H`
export START_M=`date +%m`
Run Code Online (Sandbox Code Playgroud)

在secondRun.sh我检查时间如下:

CURRENT_H=`date +%H`
CURRENT_M=`date +%M`
TIME=`expr $CURRENT_H - $START_H`

if [ $TIME -gt 0 ] && [ $START_M -lt $CURRENT_M ]; then
    echo "boot time is more than an hour"
fi
Run Code Online (Sandbox Code Playgroud)

谁能帮我找出问题出在哪里?using&&和-ain if 语句之间有什么区别吗?或者 using[]和之间有什么区别()?

Joh*_*024 8

export BOOT_TIME=$(date +%s)
current=$(date +%s)
(( current - BOOT_TIME >3600 ))  && echo "More than an hour"
Run Code Online (Sandbox Code Playgroud)

%s 返回自 1970-01-01 00:00:00 UTC 以来的秒数。

讨论:为什么秒更好

例如,假设开始(引导)时间为 23:00,当前时间为 00:23。然后,$TIME是否定的,这将不起作用:

if [ $TIME -gt 0 ] && [ $START_M -lt $CURRENT_M ]; then
    echo "boot time is more than an hour"
fi
Run Code Online (Sandbox Code Playgroud)

同理,假设开始时间是12:03,当前时间是14:00。然后,以上也不起作用,这次是因为分钟测试。

  • @Falco,我一直在考虑这个问题,我很确定 `--utc` 标志与 `%s`(自纪元以来的秒数)无关。每当我做约会数学时,将它包括在内只是我的习惯。 (2认同)