投稿

3月, 2022の投稿を表示しています

Linux Bashで経過時間を計算・表示

 もしかしたら他にいい方法があるのかもしれないけど、この方法よく使うので、備忘録として記録。 # $1 : seconds function sec_to_hourdate() { ((sec=${1}%60, min=(${1}%3600)/60, hrs=${1}/3600)) printf "%02d:%02d:%02d\n" $hrs $min $sec } start_sec=`date +%s` start_date=`date +"%Y/%m/%d %H:%M:%S" --date=@${start_sec}` ・・・ 何らかの処理 ・・・ finish_sec=`date +%s` finish_date=`date +"%Y/%m/%d %H:%M:%S" --date=@${finish_sec}` def_sec=$((${finish_sec} - ${start_sec})) echo "Spent time is `sec_to_hourdate ${def_sec}`" 説明 sec_to_hourdateは、秒数から経過時間を計算します。 「時間:分:秒」形式で標準出力に出力します。 start_secは、UNIX時刻 (1970年1月1日0時UTCからのうるう秒を考慮しない秒数) start_dateは、UNIX時刻を与えて、測定開始時の日時を算出 finish_secは、start_secと同様、UNIX時刻 finish_dateは、start_dateと同様、測定終了時の日時を算出 def_secは、UNIX時刻での引き算。秒数同士なので簡単に計算できます。 UNIX時刻を与えて現在の日付を出す、というあたりが結構忘れがち。 メモメモ 補足 単純に経過時間を測定するだけならtimeコマンドで十分です。 「いつ」はじまって、「いつ」終わったか?を一緒に測りたかったり、複数処理を測定する必要があるけど、別スクリプト化するのがメンドクサイ。というときにこちらを使うことになるかと思います。 場合によっては、dateで時間を記録して、そのあとの処理をtimeで測定する。という方法でもよいかと。