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


30

スクリプトの最初から開始し、最後で停止するタイマーが必要でした。


2
達成したい目標を書いてください。スクリプトの稼働時間を測定するにはtimeコマンド(time ./script.sh)を使用し、現在の時間を出力するにはdateコマンドを使用します。
ラッシュ


基本的なLinuxのcmdを使用しますtime yourprogram.sh、@Marius Cotofanaは説明していること
マルタインバンウィーゼル

回答:



23

Linuxの組み込みtimeコマンドを使用できます。manページから:

timeコマンド[引数]

timeは、文字列FORMATからCOMMANDによって使用されるリソースについて表示する情報を決定します。コマンドラインで形式が指定されていないが、TIME環境変数が設定されている場合、その値が形式として使用されます。

cleanup.shスクリプトの時間を計るには、次を使用します。

$ time cleanup.sh

1
timeあなたが使用していることを知っています。hackernoon.com/...
km6zla

8

これはかなり古い質問ですが、これは何かを実行するのにかかった時間を知りたい/必要なときに、これを行う方法です。

Bashには、名前付きの内部変数の形式で組み込みの秒タイマーがあります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

3
このような手の込んだ時間の書式設定を望まない人へのショートカット:date +%T -d "1/1 + $SECONDS sec"(24時間未満に制限されていますが、日を追加することもできます)
-xhienne

1
#!/bin/bash

start=$(date +%s)
#
# do something
sleep 10
#
#
end=$(date +%s)

seconds=$(echo "$end - $start" | bc)
echo $seconds' sec'

echo 'Formatted:'
awk -v t=$seconds 'BEGIN{t=int(t*1000); printf "%d:%02d:%02d\n", t/3600000, t/60000%60, t/1000%60}'

1
こんにちは、Unix SEにようこそ!コードのみの回答はあまりよく見えません。スクリプトが何をしているのか説明できるかもしれません。
ペテルは、モニカを

0

@anaskはこの答えに対して賢明な解決策を行いますが、$SECONDS代わりにネイティブを使用して新しいものを作成することをお勧めします

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および分割の目的は、経過した秒数をそれぞれ対応する単位時間、分、秒に変換することです。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.