月末かどうか確認する方法・dateコマンド †月末だけ実行したい処理があるなどの場合、月末は28, 29, 30, 31と4種類あります。 関連資料 †
月末を判別する方法 †翌日が1日であれば、本日は月末ですよね。 date --date '1 day' date --date '+1 day' date -d '1 day' date -d '+1 day' これで翌日の日時が表示されます。 実行結果は以下のようになります。 [sakura@centos ~]$ date 2012年 5月 22日 火曜日 11:04:12 JST [sakura@centos ~]$ date --date '1 day' 2012年 5月 23日 水曜日 11:04:14 JST [sakura@centos ~]$ date --date '+1 day' 2012年 5月 23日 水曜日 11:04:14 JST [sakura@centos ~]$ date -d '1 day' 2012年 5月 23日 水曜日 11:04:14 JST [sakura@centos ~]$ date -d '+1 day' 2012年 5月 23日 水曜日 11:04:14 JST 日付だけを取得したのいので+%dオプションを利用します。 日付フィールド <省略> %d 月内通算日数 (01..31) <省略> したがって、+%dを利用することにより、翌日の日付のみを取得できます。 date --date '1 day' +%d 実行結果は以下のようになります。 [sakura@centos ~]$ date 2012年 5月 22日 火曜日 11:08:18 JST [sakura@centos ~]$ date +%d 22 [sakura@centos ~]$ date --date '1 day' +%d 23 シェルスクリプトに組み込む †以下のサンプルスクリプトのようにdateコマンドから返却された値が1だった場合、月末となります。 #!/bin/bash nextday=`date --date '1 day' +%d` if [ $nextday -eq 1 ]; then echo `date +%Y/%m/%d` is end of the month. else echo `date +%Y/%m/%d` is *NOT* end of the month. fi 実行結果 [sakura@centos ~]$ date 2012年 5月 30日 水曜日 11:16:30 JST [sakura@centos ~]$ ./chk-eom.sh 2012/05/30 is *NOT* end of the month. [sakura@centos ~]$ date 2012年 5月 31日 木曜日 11:17:01 JST [sakura@centos ~]$ ./chk-eom.sh 2012/05/31 is end of the month. |