holiday/update
2025-02-23 12:56:20 +09:00

71 lines
1.5 KiB
Bash
Executable File

#!/bin/sh
# Settings
CSV_URL="https://www8.cao.go.jp/chosei/shukujitsu/syukujitsu.csv"
# Constants
EXIT_SUCCESS=0
EXIT_FAILURE=1
# Verify the required runtime environment
verify_command() {
if ! command -v $1 >/dev/null; then
echo "This script requires \"$1\" to be installed. Please install it and try again."
exit $EXIT_FAILURE
fi
}
verify_command "curl"
verify_command "nkf"
verify_command "awk"
# Logging
CURRENT_MONTH=$(date "+%Yw%U%z")
SCRIPT_NAME=$(basename $0)
LOG_DIR="log"
LOG_FILE="$LOG_DIR/$SCRIPT_NAME_$CURRENT_MONTH"
get_current_time() {
date "+%Y-%m-%d %H:%M:%S%z"
}
log() {
local timestamp=$(get_current_time)
local message=$1
echo "$timestamp $message" >>$LOG_FILE
}
# Acquire the lock or exit
LOCK_DIR="lock"
if ! mkdir "$LOCK_DIR" 2>/dev/null; then
echo "Another process is holding the lock. Exiting."
exit $EXIT_FAILURE
fi
mkdir -p $LOG_DIR
# Internal configuration settings
TMP_CSV_FILE="holidays-jp-tmp.csv"
RAW_CSV_FILE="holidays-jp-raw.csv"
ALL_CSV_FILE="holidays-jp-all.csv"
CSV_FILE="holidays-jp.csv"
# Run
curl -sS -L -o $TMP_CSV_FILE $CSV_URL
if ! diff -q $RAW_CSV_FILE $TMP_CSV_FILE >/dev/null 2>&1; then
mv $TMP_CSV_FILE $RAW_CSV_FILE
nkf -w $RAW_CSV_FILE >$ALL_CSV_FILE
current_year=$(date +'%Y')
tail -n +2 $ALL_CSV_FILE | awk -v cy="$current_year" -F'/' '{ if ($1 >= cy) print }' >$CSV_FILE
log "Changed"
else
log "No Change"
rm $TMP_CSV_FILE
fi
# Release the lock
rmdir "$LOCK_DIR"
# Exit
exit $EXIT_SUCCESS