こんにちは、さるまりんです。
日次の処理をある日から別のある日まで1日ずつ繰り返し実行することって結構あると思います。以下はその日付の文字列を作るシェルスクリプトです。
run-for-days.sh
#!/bin/sh
BEGIN=20210226
END=`date '+%Y%m%d'`
echo run from $BEGIN to $END
CUR=$BEGIN
while [ 1 ] ; do
CMD="echo $CUR"
$CMD
if [ $CUR -ge $END ] ; then
break
fi
CUR=`date -d "$CUR 1day" "+%Y%m%d"`
done
コードの説明です。
変数BEGIN
には開始日付、変数END
は終了日付です。今回はBEGIN
には2021年2月26日を、END
にはdate
コマンドを使って当日日付 (2021年3月15日)を設定しています。
繰り返し処理の前で変数CUR
を開始日の日付で初期化します。
繰り返し処理ではecho
で日付を出力しています。
繰り返しの終了条件はCUR
がEND
よりも同じか大きくなった(当日か後の日付)になることです。
if [ $CUR -ge $END ] ; then
break
fi
CUR
は繰り返しの度に↓のコードで1日ずつ先に進めます。
CUR=`date -d "$CUR 1day" "+%Y%m%d"`
上のプログラムの実行結果です。
$ ./run-for-days.sh
run from 20210226 to 20210315
20210226
20210227
20210228
20210301
20210302
20210303
20210304
20210305
20210306
20210307
20210308
20210309
20210310
20210311
20210312
20210313
20210314
20210315
$
2月26日から3月15日まで1日ずつ表示されていますね。
echo
しているところを実際に必要な処理にすると日付の範囲で繰り返すプログラムの出来上がりです。
これdate
コマンドの違いでMacでは動かないんです。。なので、その部分はこちらにMacのdate
コマンドについて書いてありますので、合わせて変更することで実行できます。
読んでくださってありがとうございました。
それではまた!