【シェルスクリプト】月末かどうかを判定する方法

シェルスクリプト(bash)で月末の判定を行う方法です。

月末判定シェルスクリプト

今日が月末なのかを判定するシェルスクリプトです。

date +%d --date '1 day'で次の日付を取得し、次の日が1日(01)であるかどうかで月末なのかを判定しています。

月末の場合「End of month」と表示し、月末以外は「Not end of month」と表示させています。

#!/bin/bash
set -e

# 明日の日付を取得
next_date=`date +%d --date '1 day' `

# 明日の日付が1日であれば月末と判定
if [[ ${next_date} = 01 ]]; then 
  echo "End of month"
else
  echo "Not end of month" 
fi

if [[ ${next_date} = 01 ]]; then 部分の01を変更することで、月末以外も判定することができます。

例えば01を21に変更すると、20日であるかを判別することができます。

実行例

check_eom.shという名前でシェルスクリプトを作成し、月末以外と月末でのスクリプトの動作を実際に確認してみます。

$ vi check_eom.sh
$ chmod +x check_eom.sh

月末以外の場合

スクリプト実行した日が月末ではないのでNot end of monthと表示されています。

$ date
Thu May 23 22:29:54 JST 2024
$ ./check_eom.sh 
Not end of month

-xオプションを使用して実行内容を確認してみると、スクリプトを実行した次の日(24)が変数next_dateに格納されているのが確認できます。

$ bash -x ./check_eom.sh 
+ set -eu
++ date +%d --date '1 day'
+ next_date=24
+ [[ 24 = 01 ]]
+ echo 'Not end of month'
Not end of month

月末の場合

日付を月末に設定してからスクリプトを実行すると、月末なのでEnd of monthと表示されます。

$ date
Fri May 31 22:28:24 JST 2024
$ ./check_eom.sh 
End of month

-xオプションを使用して実行内容を確認してみると、月末の次の日である次の月の1日(01)が変数next_dateに格納されているのが確認できます。

$ bash -x ./check_eom.sh 
+ set -eu
++ date +%d --date '1 day'
+ next_date=01
+ [[ 01 = 01 ]]
+ echo 'End of month'
End of month

コメント

タイトルとURLをコピーしました