Linux dateコマンドTips(CentOS , Ubuntu)

2019-09-27

前提条件

  • 今回は、シェルスクリプトの変数にdateで取得した値を使用する場合のTipsをご紹介します。
  • 一般的なLinuxコマンドのため、CentOS, Ubuntuで使用可能です。

コマンドのサンプル

  • dateコマンドは、”+フォーマット“の指定で結果の出力を制御できます。
  • 今日をYYYYMMDD(年月日を8桁の数字)にて表す。

$ date '+%Y%m%d'
20190908
  • 今日から5日後をYYYYMMDD(年月日を8桁の数字)にて表す。

$ date --date "5 days" '+%Y%m%d'
20190913
  • 昨日、一昨日をYYYYMMDD(年月日を8桁の数字)にて表す。

$ date --date "1 days ago" '+%Y%m%d'
20190907
$ date --date "2 days ago" '+%Y%m%d'
20190906
  • 今日から1ヶ月後をYYYYMMDD(年月日を8桁の数字)にて表す。

$ date --date "1 month" '+%Y%m%d'
20191008
  • 今日から3ヶ月前をYYYYMMDD(年月日を8桁の数字)にて表す。

$ date --date "3 month ago" '+%Y%m%d'
20190608
  • 来月1日(今月1日の1ヶ月後)をYYYYMMDD(年月日を8桁の数字)にて表す。

$ date --date "`date '+%Y/%m/01'` 1 month" '+%Y%m%d'
20191001
  • 先月末(今月1日の1日前)をYYYYMMDD(年月日を8桁の数字)にて表す。

$ date --date "`date '+%Y/%m/01'` 1 days ago" '+%Y%m%d'
20190831

シェルスクリプトのサンプル

  • シェルスクリプトのサンプルです。変数に、前述の方法を使いdateコマンドの結果を代入します。今回は取り出した日付に、一律9時をセットするため”09″を付加します。
  • DAYBFRYESTDには一昨日の9時、YESTDには昨日の9時、TODAYには今日の9時、ENDOF_LSTMTHには先月末の9時を代入します。
  • コマンドの実行結果を変数に代入するため、バッククオートを使用しています。ENDOF_LSTMTHはコマンドの入れ子となりますが、バッククオートのダブルはエラーとなるため、$( ) を使います。

DAYBFRYESTD=`date --date "2 days ago" '+%Y%m%d'`09
YESTD=`date --date "1 days ago" '+%Y%m%d'`09
TODAY=`date '+%Y%m%d'`09
ENDOF_LSTMTH=$(date --date "`date '+%Y/%m/01'` 1 days ago" '+%Y%m%d')09

bash, CentOS, Ubuntu

Posted by takaaki