このエントリーをはてなブックマークに追加


月末かどうか確認する方法・dateコマンド

月末だけ実行したい処理があるなどの場合、月末は28, 29, 30, 31と4種類あります。
そこで、dateコマンドを利用して月末を調べる方法を以下に記します。


関連資料

月末を判別する方法

翌日が1日であれば、本日は月末ですよね。
これを、dateコマンドで再現してみます。
以下コマンドで翌日が表示されます。(4つとも同じ動作になります。)

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オプションを利用します。
manコマンドでdateコマンドを確認すると以下の記述があります。

日付フィールド
<省略>
    %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.


添付ファイル: filechk-eom.sh 520件 [詳細]

トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2015-03-20 (金) 22:26:58