4

我是 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] >输出.txt。

提前感谢您的所有帮助

4

2 回答 2

3

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

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!"
于 2013-07-03T15:34:17.803 回答
2

自 Epoch with 以来,您不要尝试解析输出stat并在几秒钟内直接获取其输出,%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
于 2013-07-03T15:50:38.330 回答