2013-07-03 21 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算法會更容易。

您的腳本看起來像這樣(用適當的引用,現代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代碼要很多整潔 – Stuart

相關問題