[LINUX] Jugement de vacances, y compris les vacances avec bash

Objectif: utiliser bash pour déterminer les vacances, y compris les vacances

Si vous souhaitez utiliser la coque, etc. uniquement en semaine, ou uniquement les jours fériés, y compris les jours fériés Non seulement les samedis et dimanches, mais aussi les jours fériés doivent être pris en compte. Cet article explique comment implémenter ce cas.

environnement

Obtenez une liste de vacances

La liste des jours fériés est publiée par le Cabinet Office.

https://www8.cao.go.jp/chosei/shukujitsu/gaiyou.html

Un fichier csv décrivant une liste de jours fériés a été publié, Au 29 février 2020, il n'est répertorié que jusqu'en 2021.

Par conséquent, utilisez ce qui suit:

Dépôt de holiday-jp https://github.com/holiday-jp/holiday_jp/blob/master/holidays.yml

... 2019-11-03: Fête de la culture 2019-11-04: Vacances de transfert de la journée de la culture 2019-11-23: Action de grâce du travail 2020-01-01: Nouvel An 2020-01-13: Journée des adultes 2020-02-11: Jour de la fondation 2020-02-23: Anniversaire de l'empereur 2020-02-24: Vacances de transfert d'anniversaire de l'empereur ...

Ici, j'ai utilisé le fichier au format yml ci-dessus, mais comme il existe des modules pour d'autres langages de programmation, Si vous souhaitez l'utiliser dans un autre environnement, recherchez le référentiel ci-dessus.

Lors de la mise à jour des jours fériés de temps en temps pour déterminer les jours fériés

Les jours fériés sont sujets à changement (récemment, changements aux vacances d'anniversaire de l'empereur, etc.) En exécutant régulièrement la commande curl suivante avec crontab etc., il sera téléchargé automatiquement.

# "jeton"Entrez OAuthToken à la place de
curl -H 'Authorization:jeton de jeton' -H 'Accept: application/vnd.github.v3.raw' -L https://api.github.com/repos/holiday-jp/holiday_jp/contents/holidays.yml > holidays.yml

De plus, on suppose que ce qui suit est satisfait.

OAuthToken est

  1. Accédez à Personal Access Tokens
  2. Cliquez sur "Générer un nouveau jeton"
  3. Entrez une chaîne de caractères dans Note
  4. Cochez public_repo
  5. Cliquez sur "Générer un jeton" Vous pouvez le créer avec.

Lors du jugement d'un jour férié sans actualiser le jour férié à tout moment

Téléchargez le fichier de la liste des jours fériés (holidays.yml) depuis le référentiel de holiday-jp et utilisez-le. Peu importe si l'environnement pour juger les vacances n'est pas connecté à Internet.

point important S'il y a un changement dans le jour férié, vous devrez télécharger à nouveau le fichier de liste de vacances.

Juger un jour férié

Ici, l'argument date est pris lorsque le shell est exécuté et le résultat du jugement du jour férié (et le nom du jour férié dans le cas d'un jour férié) est renvoyé.

example.sh


#!/bin/bash

#Un fichier qui décrit une liste de jours fériés
PUBLIC_HOLIDAY_LIST='./holidays.yml'
#Dates pour déterminer les jours fériés et les jours fériés
target_date=$(/bin/date +"%Y-%m-%d" -d $1)

#Pour les jours fériés
if [ -n "$(/bin/grep $target_date $PUBLIC_HOLIDAY_LIST)" ] ; then
	#Obtenez le nom des vacances
	public_holiday_name=$(/bin/grep $target_date $PUBLIC_HOLIDAY_LIST | /bin/awk -F ':' '{print $2}')
	echo "$target_la date est un jour férié:$public_holiday_est le nom."
#vacances(samedi,dimanche)dans le cas de
elif [ -n "$(/bin/date -d $target_date | /bin/grep -E "[samedi et dimanche]journée")" ] ; then
	#Obtenez la journée
	day_of_the_week=$(/bin/date -d $target_date | /bin/awk '{print $4}')
	echo "$target_la date est$day_of_the_la semaine."
#En semaine
else
	echo "$target_la date est un jour de la semaine."
fi

result


$ ./holiday.sh 2020-01-13
2020-01-13 est un jour férié:C'est la journée des adultes.
$ ./holiday.sh 20200113
2020-01-13 est un jour férié:C'est la journée des adultes.
$ ./holiday.sh 20200114
2020-01-14 est un jour de semaine.
$ ./holiday.sh 20200112
2020-01-12 est dimanche.
$ ./holiday.sh 20200211
2020-02-11 est un jour férié:C'est le jour de la fondation du pays.

Bonus: si vous souhaitez déterminer vos propres vacances

Indépendamment du fichier de liste générale des jours fériés, décrivez dans le format suivant et modifiez l'instruction if OK

2020-01-14: Anniversaire important 2020-02-05: Anniversaire important

original.sh


#Un fichier qui décrit une liste de jours fériés
PUBLIC_HOLIDAY_LIST='./public_holidays.yml'
#Un dossier qui décrit vos propres vacances
ORIGINAL_HOLIDAY_LIST='./original_holidays.yml'
#Dates pour déterminer les jours fériés et les jours fériés
target_date=$(/bin/date +"%Y-%m-%d" -d $1)

#Pour les jours fériés
#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

Jugement de vacances, y compris les vacances avec bash
Appeler bash avec Golang
[Mémo personnel] Achèvement automatique du bash
Equation de mouvement avec sympy
Gestion des devis en [bash]
Traitement parallèle avec Parallel de scikit-learn
Prédiction de la moyenne Nikkei avec Pytorch 2
Souvenirs de combats avec Selenium
Prédiction de la moyenne Nikkei avec Pytorch
Expansion des paramètres de variable Bash
Créez un programme de jugement de compatibilité avec le module aléatoire de python.