如何在shell脚本中更改时间并进行比较

如何在shell脚本中更改时间并进行比较

我正在使用脚本来比较时间,但出现错误,Quarterly_File.sh: line 139: [[: 0148: value too great for base (error token is "0142").有什么方法可以更改时间(小时)格式的输入并将其与其他时间进行比较?我的输入如下。

startTime=00:45
endTime=01:30
fileTime=01:42

我只是通过删除它们来比较它们:,如下所示。

if (0142 -ge 0045 && 0142 -lt 0130)
    then 
    // my logic
fi

请注意,时间范围可以是一小时范围内的任何时间。

例子

0000    0045,
0030    0130,
2345    0014 (of next day)

答案1

不确定您将如何使用bash 运算符,(但这会起作用:)

if [ 0142 -ge 0045 ] && [ 0142 -lt 0130 ]; then
    echo "yep"
fi

如果这不是您要查找的内容,请粘贴尽可能多的相关代码。

编辑:

正如下面的评论所指出的,这确实会引起问题,因为它将八进制数与(最终在上午 10 点之后)十进​​制数进行比较

我建议使用date将时间转换为秒,然后进行比较。

一个例子是:

# grab these however you are currently
time1="01:42"
time2="00:45"
time3="01:42"
time4="01:30"

time1Second=$(date -d "${time1}" +%s)
time2Second=$(date -d "${time2}" +%s)
time3Second=$(date -d "${time3}" +%s)
time4Second=$(date -d "${time4}" +%s)

# then your comparison operators and logic:
if [ "$time1Second" -ge "$time2Second" ] && [ "$time3Second" -lt "$time4second" ]; then
    # logic here
    echo true
fi

这样,您总是比较相同基数的数字

答案2

将时间转换为分钟并进行比较

startTime=00:45
fileTime=01:42

hr=${startTime/:*} mn=${startTime/*:}      # Split hh:mm into hours and minutes
startMins=$(( ${hr#0} * 60 + ${mn#0} ))    # Minutes since midnight

hr=${fileTime/:*} mn=${fileTime/*:}
fileMins=$(( ${hr#0} * 60 + ${mn#0} ))

if [[ $fileMins -ge $startMins ]]; then : ...; fi

相关内容