2017-08-04 16 views
0

このコードの目的は、1時間前から1分間隔で印刷することです。私はコードの下にありますが、私はエラーバッシュ・ループ日時+%Y-%m-%d%H:%M形式

ライン10の下に取得

to_dt=`date "+%Y-%m-%d %H:%M"` 
from_dt=`date -d "${to_dt} 1 hour ago" "+%Y-%m-%d %H:%M"` 

echo $from_dt $to_dt 

2017-08-04 01:54 2017-08-04 02:54 

while [ "${from_dt}" -lt "${to_dt}" ] 
do 

    from_dt=`date -d "${from_dt} 1 minute" "+%Y-%m-%d %H:%M"` 
    end_dt_min_after=`date -d "${from_dt} 1 minute" "+%Y-%m-%d %H:%M"` 

done 

からと日付までの間のループのトラブル持つ:[:2017年8月4日午前2時01分:整数式を予想します

期待される結果:

2017年8月4日午前1時55分2017年8月4日午前2時56分

2017年8月4日午前1時56分2017年8月4日午前2時57分

....

....

は、各ループの間に1分日からすなわちインクリメントしながら、使用して反復処理することが可能ですか?

答えて

1

私はここで簡単にするためEPOCを使用しています。

#!/bin/sh 

if [ -z $1 ];then 
echo Please pass number of seconds 
exit 1 
fi 

epoc_now=`date "+%s"` 

epoc_after_hour=`expr $epoc_now + $1` 

while [ "${epoc_after_hour}" -gt "${epoc_now}" ] 
do 
     epoc_now=`expr $epoc_now + 60` 
     date -d "@$epoc_now" 
done 
+0

ありがとうございます。私はこの使用原因の周りで遊んで、望ましい結果を得ることができました – Dvusrgme

0

-ltオペレータは、両方のオペランドが整数であると予想します。

ループを実行する前に、日付変数をEPOCH秒値に変換する必要があります。

to_dt=$(date "+%s") 
from_dt=$(date -d "@$to_dt" -d "-1 hour" "+%s") 

while [ "$from_dt" -lt "$to_dt" ]; do 
    # add 1 minute 
    from_dt=$(date -d "@$from_dt" -d "+1 minute" '+%s') 
    echo "inside the loop" 
done 
+0

何らかの理由でループが1回だけ発生すると、from_dtが内側に表示され、whileはto_dateより大きいと表示されます。しかし、from_dtをto_dt未満に設定しましたが、 – Dvusrgme

1

印刷時まで数値のタイムスタンプを処理します。 だから、で始まる:60でfrom_dtループの増分で

from_dt=$(($(date +%s -d "1 hour ago"))) 
to_dt=$(($(date +%s))) 

たびに、次に読みやすい形式でタイムスタンプを印刷:

echo "$(date -d @$from_dt)" 
+0

ありがとう、@asatsiと似たユースケースです。しかし、私は「1時間前」を使用するのが好きでした。これは、1ヵ月後に非常に簡単に移動できる柔軟性を提供するため、秒を差し引くことよりも好きでした。 – Dvusrgme

関連する問題