シェルスクリプト/コマンドで祝日判定
休みの日もcrontabで平日用のメールが来て、シェルスクリプトで祝祭日判定できないかなと思ったら簡単にできそうだったのでメモ。
gcalをインストールして(Macはbrew等、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かcoreutilsをbrewインストールして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
参照のこと。
参照:
- 「待ち遠しい次の祝日がコマンドラインでわかる!‐cal‐ 端末にカレンダーを表示しよう | FAworksブログ」 https://fa-works.com/blog/cal-display-calendar-in-terminal
- 「GNU gcal - GNU Project - Free Software Foundation」 https://www.gnu.org/software/gcal/
- 「Man page of date」 http://linuxjm.osdn.jp/html/gnumaniak/man1/date.1.html