Wenn Sie die Shell usw. nur an Wochentagen oder nur an Feiertagen einschließlich Feiertagen bedienen möchten Nicht nur Samstage und Sonntage, sondern auch Feiertage müssen berücksichtigt werden. In diesem Artikel wird erläutert, wie Sie diesen Fall implementieren.
Die Liste der Feiertage wird vom Kabinettsbüro veröffentlicht.
https://www8.cao.go.jp/chosei/shukujitsu/gaiyou.html
Eine CSV-Datei, die eine Liste der Feiertage beschreibt, wurde veröffentlicht. Ab dem 29. Februar 2020 ist es nur bis 2021 gelistet.
Verwenden Sie daher Folgendes:
Repository von Holiday-JP https://github.com/holiday-jp/holiday_jp/blob/master/holidays.yml
... 03.11.2019: Kulturtag 2019-11-04: Kulturtag Transferfeiertag 23.11.2019: Erntedankfest der Arbeit 2020-01-01: Neues Jahr 2020-01-13: Erwachsenentag 2020-02-11: Gründungstag 23.02.2020: Geburtstag des Kaisers 24.02.2020: Transferurlaub zum Geburtstag des Kaisers ...
Hier habe ich die obige Datei im yml-Format verwendet, aber da es Module für andere Programmiersprachen gibt, Wenn Sie es in einer anderen Umgebung verwenden möchten, suchen Sie nach dem obigen Repository.
Feiertage können sich ändern (kürzlich Änderungen an den Geburtstagsfeiertagen des Kaisers usw.) Wenn Sie den folgenden Curl-Befehl regelmäßig mit crontab usw. ausführen, wird er automatisch heruntergeladen.
# "Zeichen"Geben Sie OAuthToken anstelle von ein
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
Außerdem wird davon ausgegangen, dass Folgendes erfüllt ist.
OAuthToken ist
Note
einpublic_repo
Laden Sie die Urlaubslistendatei (idays.yml) aus dem Repository von Holiday-JP herunter und verwenden Sie sie. Es spielt keine Rolle, ob die Umgebung für die Beurteilung von Feiertagen nicht mit dem Internet verbunden ist.
wichtiger Punkt Wenn sich der Feiertag ändert, müssen Sie die Feiertagslistendatei erneut herunterladen.
Hier wird das Datumsargument verwendet, wenn die Shell ausgeführt wird, und das Beurteilungsergebnis des Feiertags (und der Feiertagsname im Fall eines Feiertags) wird zurückgegeben.
example.sh
#!/bin/bash
#Eine Datei, die eine Liste von Feiertagen beschreibt
PUBLIC_HOLIDAY_LIST='./holidays.yml'
#Daten zur Bestimmung von Feiertagen und Feiertagen
target_date=$(/bin/date +"%Y-%m-%d" -d $1)
#Für Feiertage
if [ -n "$(/bin/grep $target_date $PUBLIC_HOLIDAY_LIST)" ] ; then
#Holen Sie sich den Feiertagsnamen
public_holiday_name=$(/bin/grep $target_date $PUBLIC_HOLIDAY_LIST | /bin/awk -F ':' '{print $2}')
echo "$target_Datum ist ein Feiertag:$public_holiday_ist Name."
#Urlaub(Samstag,Sonntag)Im Falle von
elif [ -n "$(/bin/date -d $target_date | /bin/grep -E "[Samstag und Sonntag]Tag")" ] ; then
#Holen Sie sich den Tag
day_of_the_week=$(/bin/date -d $target_date | /bin/awk '{print $4}')
echo "$target_Datum ist$day_of_the_Woche."
#An Wochentagen
else
echo "$target_Datum ist ein Wochentag."
fi
result
$ ./holiday.sh 2020-01-13
2020-01-13 ist ein Feiertag:Es ist Erwachsenentag.
$ ./holiday.sh 20200113
2020-01-13 ist ein Feiertag:Es ist Erwachsenentag.
$ ./holiday.sh 20200114
2020-01-14 ist ein Wochentag.
$ ./holiday.sh 20200112
2020-01-12 ist Sonntag.
$ ./holiday.sh 20200211
2020-02-11 ist ein Feiertag:Es ist der Tag der Gründung des Landes.
Beschreiben Sie getrennt von der allgemeinen Feiertagslistendatei das folgende Format und ändern Sie die if-Anweisung OK
14.01.2020: Wichtiges Jubiläum 05.02.2020: Wichtiges Jubiläum
original.sh
#Eine Datei, die eine Liste von Feiertagen beschreibt
PUBLIC_HOLIDAY_LIST='./public_holidays.yml'
#Eine Datei, die Ihre eigenen Feiertage beschreibt
ORIGINAL_HOLIDAY_LIST='./original_holidays.yml'
#Daten zur Bestimmung von Feiertagen und Feiertagen
target_date=$(/bin/date +"%Y-%m-%d" -d $1)
#Für Feiertage
#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