※MACターミナル(BSD系)での動作確認です。
日付の生成にはgdateを使っています。
参考:MacのdateコマンドがLinuxと異なる挙動をしている→gdateを入れて解決できた

スポンサーリンク

seqコマンドをforループ処理して、gdateで日付をインクリメント

下記がサンプルコードになります。

gdateの-dオプションで、日付を指定します。
gdate -d "2017-01-01 $num days"とすることで、2017-01-01から$num日後という指定ができます。
forループ処理して、$numにインクリメントして値を代入していき、1日刻みで連番で日付を作成します。
今回は、seqコマンドで1〜10を生成して、forループ処理しています。
+%Y-%m-%dの部分は、出力フォーマットを指定しています。今回は、yyyy-mm-ddの形式を指定指定しています。

 $ cat sample1.sh 
#!/bin/sh

for num in $(seq 10)
do
	gdate -d "2017-01-01 $num days" +%Y-%m-%d
done

下記が実行結果になります。
 $ ./sample1.sh 
2017-01-02
2017-01-03
2017-01-04
2017-01-05
2017-01-06
2017-01-07
2017-01-08
2017-01-09
2017-01-10

スポンサーリンク

開始日時と終了日時を指定して、whileループ処理する

下記がサンプルコードになります。
whileループ処理を、指定した終了日時(サンプルコードでは指定した日時の前日まで処理する)まで行い、1日刻みで連番で日付を作成します。

 $ cat sample2.sh 
#!/bin/sh

date="2018-03-01"
endDate="2018-03-10"

while [ $date !=  $endDate ]
do
	echo $date
	date=$(gdate -d "$date 1 day" +%Y-%m-%d)
done

 $ ./sample2.sh 
2018-03-01
2018-03-02
2018-03-03
2018-03-04
2018-03-05
2018-03-06
2018-03-07
2018-03-08
2018-03-09

日付のフォーマットを変えたい場合

下記がサンプルコードになります。
yyyy/mm/ddの形式を指定指定しています。

 $ cat sample3.sh 
#!/bin/sh

date="2016/02/01"
endDate="2016/02/10"

while [ $date !=  $endDate ]
do
	echo $date
	date=$(gdate -d "$date 1 day" +%Y/%m/%d)
done

下記が実行結果になります。
 $ ./sample3.sh 
2016/02/01
2016/02/02
2016/02/03
2016/02/04
2016/02/05
2016/02/06
2016/02/07
2016/02/08
2016/02/09

スポンサーリンク