如果日期字符串是+或 - 5分钟

时间:2013-07-03 15:31:41

标签: linux bash date if-statement

我是bash脚本的新手,并尝试使用if语句。

我想检查一下文件的日期戳是否为+或 - 5分钟。我到目前为止:

#!/bin/bash
MODDATE=$(stat -c '%y' test.txt)
echo moddate= $MODDATE
MODDATE=$(echo $MODDATE |head --bytes=+16)
echo now = $MODDATE

currentdate2=$(date -d "+5 minutes" '+%Y-%m-%d %H:%M')
currentdate3=$(date -d "-5 minutes" '+%Y-%m-%d %H:%M')

echo currentdate2 = $currentdate2
echo currentdate3 = $currentdate3

所以这给了我文件的日期戳(MODDATE)和现在的日期+或 - 5分钟。

我如何做一个IF语句来说“如果$ MODDATE在$ currentdate2之间(从现在起+5分钟)和$ currentdate3之间(从现在开始-5分钟)”那么echo [1]> output.txt ELSE echo [0]> output.txt。

提前感谢您的所有帮助

2 个答案:

答案 0 :(得分:3)

我建议您使用date %s来获取自1970年1月1日以来的秒数,并使日期比较更容易。

currentdate2=$(date -d "+5 minutes" '+%s')
currentdate3=$(date -d "-5 minutes" '+%s')

因此,

if [ $moddate -ge $currentdate2 ] && [ $moddate -le $currentdate3 ]; then
  ....
fi

应该成功。

甚至更短:

[ $moddate -ge $currentdate2 ] && [ $moddate -le $currentdate3 ] && echo "in interval!"

答案 1 :(得分:2)

你怎么不尝试解析stat的输出并直接从Epoch开始用%Y来输出它的输出?然后使用Bash的算法会更容易。

您的脚本将如下所示(使用正确的引号,现代Bash结构和小写变量名称):

#!/bin/bash

moddate=$(stat -c '%Y' test.txt)
echo "moddate=$moddate"

now=$(date +%s)

if ((moddate<=now+5*60)) && ((moddate>=now-5*60)); then
    echo "[1]" > output.txt
else
    echo "[0]" > output.txt
fi