如果时间超过X且小于Y,则在黎明之间?

时间:2013-07-16 22:21:23

标签: bash date if-statement time

在我的一个循环中,我让我的Bash脚本根据时间做事:

if [ $(date +%k%M) -ge 2200 ] && [ $(date +%k%M) -lt 2300 ] ; then echo "Betwen 22 and 23!"; fi

然而,我遇到了一个我没想到的问题(虽然我应该有)。当23:59变为00:00时,if不起作用。

if [ $(date +%k%M) -ge 2359 ] && [ $(date +%k%M) -lt 200 ] ; then CURRENTFOLDER="$TARGETFOLDER/$BLOCK1"; fi 

200在数值上小于2359,但02:00晚于23:59。

我该怎么办?

1 个答案:

答案 0 :(得分:4)

转换为秒使这种“算术”更容易,更可靠。使用date的'--date ='选项指定第二天的窗口:

date --date="Today HH:MM" +"%s"
date --date="+1 day HH:MM" +"%s"

另外,为简单起见,请调用当前时间并将其用于比较:)

NOW=$(date +"%s")

示例:

(( ${NOW} >= $(date --date="Today 22:00" +"%s") )) && (( ${NOW} < $(date --date="Today 23:00" +"%s") ))

(( ${NOW} >= $(date --date="Today 23:59" +"%s") )) && (( ${NOW} < $(date --date="+1 day 02:00" +"%s") ))

您还可以使用秒字段进行文件修改比较等,使用'find'或'stat'的输出。

根据您采取的操作数量,您最好结合使用案例陈述。

祝你好运。