こんにちは、さるまりんです。
シェルスクリプトを書いていて、コマンドにどれくらい時間がかかったかを知りたいことがあります。
dateコマンドを使って
date
コマンドを使って、こんな風に実現してみました。
time-by-date.sh
#!/bin/bash
# 開始時間を取得
start_time=$(date +%s)
echo "start : $(date +"%Y-%m-%d %H:%M:%S")"
# 実行したいコマンド
your_command="sleep 5" # 例として'sleep 5'を使用
eval $your_command
# 終了時間を取得
end_time=$(date +%s)
echo "end : $(date +"%Y-%m-%d %H:%M:%S")"
# 経過時間を計算
elapsed_time=$((end_time - start_time))
echo "elapsed: ${elapsed_time} seconds"
date +%s
で開始時間、終了時間を取得し、その差分が経過ということです。
例として、ここではただ5秒待つだけの処理です。
実行すると↓のように表示されます。
$ ./time-by-date.sh
start : 2024-10-05 16:47:56
end : 2024-10-05 16:48:01
elapsed: 5 seconds
SECONDS変数を使って
もう一つの方法です。
time-by-seconds.sh
#!/bin/bash
# SECONDS変数をリセット
SECONDS=0
echo "start : $(date +"%Y-%m-%d %H:%M:%S")"
# 実行したいコマンド
your_command="sleep 5" # 例として'sleep 5'を使用
eval $your_command
# 経過時間を取得
elapsed_time=$SECONDS
echo "end : $(date +"%Y-%m-%d %H:%M:%S")"
echo "elapsed: ${elapsed_time} seconds"
こちらはbash
の組み込み変数であるSECONDS
を使って経過時間を取得しています。
スクリプトの最初で変数を0
でリセットし、最後で取れるのが経過秒数です。
こちらも同じように処理としてはただ5秒sleep
させています。
こちらも実行してみます。
$ ./time-by-seconds.sh
start : 2024-10-05 16:49:45
end : 2024-10-05 16:49:50
elapsed: 5 seconds
最初の方法はdate
コマンドを使っているので細かい精度で計測することができます。
二つ目のSECONDS
を使う方法では変数の名の通り秒の精度になります。
ただ最初にリセットして最後で取り出すだけで使えるので簡単と言えば簡単ですね。
全体の経過時間のみとるのであればこれがシンプルそうですね。
組み込み機能についてあまり知らないので、こういう便利なものがもっと用意されているんでしょうね。
色々チャレンジしてみることは大切です。
読んでくださってありがとうございました。
それではまた!