シェルスクリプト(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
コメント