我是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。
提前感谢您的所有帮助
答案 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