Bashでタイマーを使用する方法は?

Bashでタイマーを使用する方法は?

スクリプトの先頭から始まり、最後に停止するタイマーが必要です。

答え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経過した秒をそれぞれ対応する単位である時、分、秒に変換することです。

関連情報