2013-07-03 2 views
4

Я новичок в сценариях bash и пытаюсь работать с выражением if.Если строка даты + или - 5 минут, то

Я хочу сделать чек, чтобы увидеть, есть ли отметка даты файла + или - 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

Как насчет не пытайтесь разобрать вывод stat и непосредственно принимать свою продукцию в секундах с начала эпохи с %Y? Тогда было бы проще использовать арифметику Баша.

Ваш сценарий будет выглядеть следующим образом (с соответствующим котированием, современным 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 
+0

Спасибо, что это отлично работает! – Stuart

3

Я рекомендую вам использовать date %s иметь дату в секундах с 1/1/1970 и сделать сравнение даты гораздо проще.

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!" 
+0

Спасибо за это мне удалось заставить его работать, как это, но с тех пор нашел код из gniourf_gniourf чтобы быть много neater – Stuart

Смежные вопросы