[LINUX] Beurteilung von Feiertagen einschließlich Feiertagen mit Bash

Zweck: Verwenden Sie Bash, um Feiertage einschließlich Feiertage zu bestimmen

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.

Umgebung

Holen Sie sich eine Liste der Feiertage

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.

Wenn Sie Feiertage von Zeit zu Zeit aktualisieren, um Feiertage zu bestimmen

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

  1. Gehen Sie zu Persönliche Zugriffstoken.
  2. Klicken Sie auf "Neues Token generieren"
  3. Geben Sie eine beliebige Zeichenfolge in Note ein
  4. Überprüfen Sie public_repo
  5. Klicken Sie auf "Token generieren" Sie können es mit erstellen.

Wenn Sie einen Feiertag beurteilen, ohne ihn jederzeit zu aktualisieren

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.

Beurteilen Sie einen Feiertag

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.

Bonus: Wenn Sie Ihren eigenen Urlaub bestimmen möchten

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

Beurteilung von Feiertagen einschließlich Feiertagen mit Bash
Bash mit Golang anrufen
[Persönliches Memo] Automatischer Abschluss der Bash
Bewegungsgleichung mit Sympy
Umgang mit Zitaten in [bash]
Parallele Verarbeitung mit Parallel von Scikit-Learn
Vorhersage des Nikkei-Durchschnitts mit Pytorch 2
Erinnerungen an den Kampf mit Selen
Vorhersage des Nikkei-Durchschnitts mit Pytorch
Erweiterung der Bash-Variablenparameter
Erstellen Sie ein Kompatibilitätsbewertungsprogramm mit dem Zufallsmodul von Python.