
スクリプトの先頭から始まり、最後に停止するタイマーが必要です。
答え1
持続時間を秒単位で希望する場合は、上部で使用してください。
start=$SECONDS
ついに
duration=$(( SECONDS - start ))
答え2
Linuxに組み込まれたtime
コマンドを使用できます。マニュアルページから:
時間コマンド[パラメータ]
時刻は、FORMAT 文字列で COMMAND が使用するリソースについて表示される情報を決定します。コマンドラインでフォーマットされていないがTIME環境変数が設定されている場合、その値はフォーマットとして使用されます。
スクリプト時間を測定するには、次をcleanup.sh
使用します。
$ time cleanup.sh
答え3
私はこれが古い質問であることを知っていますが、実行するのにどれくらいの時間がかかるのかを知りたい、または知りたいときにすべてのことを行う方法です。
Bashには内部変数という名前の2番目のタイマーが組み込まれていますSECONDS
(参照:ここ他の内部変数の場合)
SECONDS=0
実行時間を確認したいよりも先に。良い結果を得るには、ユーザー入力の後に来る必要があります。情報を求める場合は、プロンプトの後に入力してください。
次に、確認する内容の最後に次のように入力します。
if (( $SECONDS > 3600 )) ; then
let "hours=SECONDS/3600"
let "minutes=(SECONDS%3600)/60"
let "seconds=(SECONDS%3600)%60"
echo "Completed in $hours hour(s), $minutes minute(s) and $seconds second(s)"
elif (( $SECONDS > 60 )) ; then
let "minutes=(SECONDS%3600)/60"
let "seconds=(SECONDS%3600)%60"
echo "Completed in $minutes minute(s) and $seconds second(s)"
else
echo "Completed in $SECONDS seconds"
fi
時間を秒単位で知りたい場合は、上記の内容を次のように単純化できます。
echo "Completed in $SECONDS seconds"
たとえば、
read -rp "What's your name? " "name"
SECONDS=0
echo "Hello, $name"
if (( $SECONDS > 3600 )) ; then
let "hours=SECONDS/3600"
let "minutes=(SECONDS%3600)/60"
let "seconds=(SECONDS%3600)%60"
echo "Completed in $hours hour(s), $minutes minute(s) and $seconds second(s)"
elif (( $SECONDS > 60 )) ; then
let "minutes=(SECONDS%3600)/60"
let "seconds=(SECONDS%3600)%60"
echo "Completed in $minutes minute(s) and $seconds second(s)"
else
echo "Completed in $SECONDS seconds"
fi
答え4
$SECONDS
@anaskはこの答えに賢い解決策を提供しました。ただし、新しい回答を作成する代わりにネイティブを使用することをお勧めします。
awk -v t=$SECONDS 'BEGIN{t=int(t*1000); printf "Elapsed Time (HH:MM:SS): %d:%02d:%02d\n", t/3600000, t/60000%60, t/1000%60}'
および除算の目的は、printf
経過した秒をそれぞれ対応する単位である時、分、秒に変換することです。