If you want to operate the shell etc. only on weekdays, or only on holidays including holidays Holidays need to be considered as well as Saturdays and Sundays. This article explains how to implement that case.
The list of holidays is published by the Cabinet Office.
https://www8.cao.go.jp/chosei/shukujitsu/gaiyou.html
A csv file that describes a list of holidays is open to the public, As of February 29, 2020, it is only listed until 2021.
Therefore, use the following:
holiday-jp's repository https://github.com/holiday-jp/holiday_jp/blob/master/holidays.yml
... 2019-11-03: Culture Day 2019-11-04: Culture Day Substitute Holiday 2019-11-23: Labor Thanksgiving Day 2020-01-01: New Year's Day 2020-01-13: Coming of Age Day 2020-02-11: National Foundation Day 2020-02-23: The Emperor's Birthday 2020-02-24: Emperor's Birthday Substitute Holiday ...
Here, I used the above yml format file, but since there are modules for other programming languages, If you want to use it in other environments, please look for the above repository.
Holidays are subject to change (recently, changes to the Emperor's Birthday holidays, etc.) By executing the following curl command regularly with crontab etc., it will be downloaded automatically.
# "token"Enter OAuthToken in the place of
curl -H 'Authorization:token token' -H 'Accept: application/vnd.github.v3.raw' -L https://api.github.com/repos/holiday-jp/holiday_jp/contents/holidays.yml > holidays.yml
In addition, it is assumed that the following is satisfied.
--The environment for judging holidays must be able to connect to the Internet --The GitHub repository has been updated to the latest holiday list --You have created a GitHub account and issued an OAuth Token.
OAuthToken is
Generate new token
Note
public_repo
Generate token
You can create it with.Download the holiday list file (holidays.yml) from holiday-jp's repository and use it. It doesn't matter if the environment for judging holidays is not connected to the Internet.
important point If there are any changes to the holidays, you will need to download the holiday list file again.
Here, the date argument is taken when the shell is executed, and the holiday judgment result (and the holiday name in the case of a holiday) is returned.
example.sh
#!/bin/bash
#A file that describes a list of holidays
PUBLIC_HOLIDAY_LIST='./holidays.yml'
#Dates for determining holidays and holidays
target_date=$(/bin/date +"%Y-%m-%d" -d $1)
#For holidays
if [ -n "$(/bin/grep $target_date $PUBLIC_HOLIDAY_LIST)" ] ; then
#Get the holiday name
public_holiday_name=$(/bin/grep $target_date $PUBLIC_HOLIDAY_LIST | /bin/awk -F ':' '{print $2}')
echo "$target_date is a holiday:$public_holiday_is name."
#holiday(Saturday,Sunday)in the case of
elif [ -n "$(/bin/date -d $target_date | /bin/grep -E "[Saturday and Sunday]Day of the week")" ] ; then
#Get the day of the week
day_of_the_week=$(/bin/date -d $target_date | /bin/awk '{print $4}')
echo "$target_date is$day_of_the_week."
#On weekdays
else
echo "$target_date is a weekday."
fi
result
$ ./holiday.sh 2020-01-13
2020-01-13 is a holiday:Coming of age day.
$ ./holiday.sh 20200113
2020-01-13 is a holiday:Coming of age day.
$ ./holiday.sh 20200114
2020-01-14 is a weekday.
$ ./holiday.sh 20200112
2020-01-12 is sunday.
$ ./holiday.sh 20200211
2020-02-11 is a holiday:National Foundation Day.
Separately from the general holiday list file, describe in the following format and change the if statement OK
2020-01-14: Important Anniversary 2020-02-05: Important Anniversary
original.sh
#A file that describes a list of holidays
PUBLIC_HOLIDAY_LIST='./public_holidays.yml'
#A file that describes your own holidays
ORIGINAL_HOLIDAY_LIST='./original_holidays.yml'
#Dates for determining holidays and holidays
target_date=$(/bin/date +"%Y-%m-%d" -d $1)
#For holidays
#if [ -n "$(/bin/grep $target_date $PUBLIC_HOLIDAY_LIST)" ] ; then
if [ -n "$(/bin/grep $target_date $PUBLIC_HOLIDAY_LIST)" ] || [ -n "$(/bin/grep $target_date $ORIGINAL_HOLIDAY_LIST)" ] ; then
# ...
fi
Recommended Posts