シェルスクリプト/コマンドで祝日判定

休みの日もcrontabで平日用のメールが来て、シェルスクリプトで祝祭日判定できないかなと思ったら簡単にできそうだったのでメモ。

gcalをインストールして(Macbrew等、linux系は入ってなければソースから)、

$ gcal --holiday-list=short --cc-holidays=jp --highlighting=no | grep "$(LANG=C date +'%_d %b %Y')"

あるいは短縮オプション版で、

$ gcal -N -q jp -H no | grep "$(LANG=C date +'%_d %b %Y')"

grepがひっかかれば祝日。

例えば 11/3(文化の日) はこんな感じ。
Macはgdateかcoreutilsbrewインストールしてgdateが使える必要あり)

$ test `uname` = Darwin && date=gdate || date=date
$ gcal -N -q jp -H no 2018 | grep "$(LANG=C $date +'%_d %b %Y' -d 2018-11-03)"
Culture Day (JP)                         + Sa,   3 Nov 2018 =  +79 days

この例では法定祝日に限定しているが、それ以外も判定可能なので詳しくはgcalマニュアルinfo gcal参照のこと。

参照: