Ich brauchte einen Timer, der ganz am Anfang des Skripts startet und am Ende stoppt.
time yourprogram.sh
cmd:, dass @Marius Cotofana erklärt
Ich brauchte einen Timer, der ganz am Anfang des Skripts startet und am Ende stoppt.
time yourprogram.sh
cmd:, dass @Marius Cotofana erklärt
Antworten:
Wenn Sie die Dauer in Sekunden wünschen, verwenden Sie oben
start=$SECONDS
und am Ende
duration=$(( SECONDS - start ))
Sie können den in Linux integrierten time
Befehl verwenden. Von der Manpage:
time COMMAND [Argumente]
time bestimmt anhand der Zeichenfolge FORMAT, welche Informationen zu den vom COMMAND verwendeten Ressourcen angezeigt werden sollen. Wenn in der Befehlszeile kein Format angegeben ist, aber die Umgebungsvariable TIME festgelegt ist, wird der Wert als Format verwendet.
cleanup.sh
Verwenden Sie zum zeitlichen Festlegen des Skripts Folgendes:
$ time cleanup.sh
time
Sie, was Sie verwenden. hackernoon.com/…
Mir ist klar, dass dies eine ziemlich alte Frage ist, aber so mache ich es für alles, wenn ich wissen möchte / muss, wie lange etwas gedauert hat, um zu laufen.
Bash hat einen eingebauten Sekunden-Timer in Form einer internen Variablen namens SECONDS
(siehe: hier für andere interne Variablen)
Stellen Sie SECONDS=0
vor was auch immer Sie die Laufzeit von überprüfen. Es muss nach jeder Benutzereingabe erfolgen, um ein gutes Ergebnis zu erhalten. Wenn Sie also zur Eingabe von Informationen aufgefordert werden, setzen Sie diese nach die Eingabeaufforderung (en).
Dann setzen Sie dies am Ende dessen, was Sie überprüfen:
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
Wenn Sie nur die Zeit in Sekunden wissen möchten, können Sie das oben Gesagte vereinfachen, um:
echo "Completed in $SECONDS seconds"
Als Beispiel:
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
date +%T -d "1/1 + $SECONDS sec"
(auf weniger als
#!/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}'
@anask mache eine clevere Lösung für diese Antwort, nur empfehle ich, die native zu $SECONDS
verwenden, um eine neue zu erstellen
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}'
Der Zweck der printf
und der Division besteht darin, die verstrichenen Sekunden in die entsprechende Einheit Stunden, Minuten, Sekunden umzuwandeln.
time
Skriptarbeitszeit verwenden Sie den Befehl (time ./script.sh), zum Ausdrucken der aktuellen Zeit dendate
Befehl usw.