2016-09-10 6 views
2

4日前の日付が現在の日付と等しくなければならないスクリプトを作成しようとしています。以下は私が作成したものの、答えについてはっきりしていないものです。UNIXシェルスクリプトで日付の範囲を繰り返す


#!/bin/bash 

batchdate=`date --date "4 day ago" '+%Y%m%d'` 
matchdate=`date --date "today" '+%Y%m%d'` 

for i in {0..4} 
do 
    if [ $batchdate != $matchdate && $NEXT_DATE != $matchdate ]; then 

    NEXT_DATE=$(date +%Y%m%d -d "$batchdate + $i day") 

    echo "$NEXT_DATE" 

    break 

    fi 

done 
+2

'batchdate'と' matchdate'は等しくないでしょう。 2つの異なる日付に初期化され、どちらの変数の値も決して変更しません。 – chepner

+0

しかし、2つの日付テスト、すなわち '&&'の代わりに '||'をORすることを意味するかもしれません。がんばろう。 – shellter

+1

また、 'matchdate'と' batchdate'/'NEXT_DATE'の2つの異なるフォーマットを使用して、文字列が決して等しくないことをさらに保証します。 'bash'は日付比較を行わず、文字列の比較のみを行います。 – chepner

答えて

5

まず、少し異なる方法で同じことやって回避するために、小さなヘルパー関数を定義します。現在の日付、変更することはありません:今すぐ

get_date() { 
    date +%Y-%m-%d --date "$1" 
} 

を、次の2つの変数を持っています開始日は、のいずれかが現在の日付に一致するまで一度に日に増加します。

then=$(get_date "4 days ago") 
now=$(get_date "today") 

while [[ $then != $now ]]; do 
    then=$(get_date "$then + 1 day") 
    echo "$then" 
done 
+0

ありがとうございました –