Bash でタイムスタンプや、その比較を行いたかったが、やり方を知らないことに気づいたので、焦らずしっかり調べて理解する。
現在の時間の取得
dateコマンドは現在時間を取得する。
$ date
Fri Apr 17 14:54:18 PDT 2020
上記のは現在のタイムゾーンの値であるので、大小比較が可能な、1970-01-01 00:00:00 UTCからの経過秒数に変換します。%sがそれを表す記号ですので、`date "+フォーマット" の形式で形式をしていして表示できます。
$ date"+%s"
1587160470
Date のフォーマット
$ date"+%m/%d/%Y %H:%M"
04/17/2020 15:01
現在時のフォーマットはこれでよいですが、特定の文字列のフォーマットから違うフォーマットに変換する場合は、--dateもしくは -dの引数で文字列を渡すとよいです。
$ date-d"04/17/2020 15:10"
Fri Apr 17 15:10:00 PDT 2020
$ date-d"04/17/2020 15:10""+%m/%d/%Y %H:%M"
04/17/2020 15:10
%s からのフォーマット
ただし、文字列ではなく、1970-01-01 00:00:00 UTCからの経過秒数 から変換をかけたい時は@を添付します。
date--date @1269553200 "+%m/%d/%Y %H:%M"
03/25/2010 14:40
大小の比較
タイムスタンプの大小比較は、1970-01-01 00:00:00 UTCからの経過秒数で比較するのがよさそうです。単純に比較するとよいです。結果も予想通り。ちなみに、Bashで数値の計算をしたいときは、$((計算))になります。
test.sh
#!/bin/bashlast=$(date"+%s")sleep 1
current=$(date"+%s")if[$current-gt$last];then
s=$((current - last))echo"current is bigger than Last: difference: ${s} sec."else
s=$((last - current))echo"Last is bigger than Current: difference: ${s} sec."fi結果は想定の通りです。
$./test.sh
current is bigger than Last: difference: 1 sec.