※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
スポンサーリンク