女子だってIT

dateコマンドから前月を取得する

RedHat6.6 で前月を取得する必要があったので、その時のメモです。

サーバに保存されたアプリケーションごとのディレクトリのログを毎月grepし、集計したり、1つのファイルにまとめるシェルスクリプトを作成しました。

ログが格納されたディレクト名を指定するために「年」、「月」を取得する必要がありました。
サーバやアプリによりログの格納されるディレクトリの命名規則が違うため、年や月をそれぞれ変数に格納してディレクトリを指定するために使用した時のメモです。

<ディレクトリ名の例>
/2020/01/
/2020/Jan/
/20/01

●当月の1日を求める
当月の1日から1か月前の年月を取得するためにTHISMONTHに当月1日をセットしました。別に必須ではないのですが、わかりやすいかな?と思ってしました。
THISMONTH=`date  ‘+%Y-%m-01’`

●前月(01~12形式)を求める
MON1に当月の1日から前月の月を求めセットしました。
MON1=`date -d ” ${THISMONTH} 1 months ago” ‘+%m’`
%mは、月を01~12形式で表示します。

変数を使用しない場合は以下でいいのでは?と思いますが検証してません。
date -d “`date ‘ +%Y-%m-01’ ` 1 months ago” ‘+%m’

●前月(Jan~Dec形式)を求める
MON2に当月の1日から前月の月を求めセットしました。
MON2=`date -d ” ${THISMONTH} 1 months ago” ‘+%b’`
%bは、月をJan~Dec形式で表示します。

●年(YYYY形式)を求める
YEAR1に当月の1日から前月の年を求めセットしました。
YEAR1=`date -d ” ${THISMONTH} 1 months ago” ‘+%Y’`
%Yは、年をYYYY形式で表示します。

●年(YY形式)を求める
YEAR2に当月の1日から前月の年を求めセットしました。
YEAR2=`date -d ” ${THISMONTH} 1 months ago” ‘+%y’`
%yは、年をYY形式で表示します。

●確認作業
echo ${THISMONTH}
echo ${MON1}
echo ${YEAR1}
echo ${MON2}
ここで、想定外の${MON2}の結果が「Jan」ではなく「1月」と表示されたので「LANG=C」を追加しました。

変数に年や月をセットして、ディレクトリ名は変数を指定したので、スクリプトファイル自体は見やすくなりました。