Shellscript: Zeitdauer darstellen

Vom einfachen Programm zum fertigen Debian-Paket, Fragen rund um Programmiersprachen, Scripting und Lizenzierung.
Antworten
katze123
Beiträge: 88
Registriert: 10.06.2016 20:05:47

Shellscript: Zeitdauer darstellen

Beitrag von katze123 » 01.12.2018 20:30:49

Ich messe die Zeitdauer, die für die Ausführung einiger Zeilen benötigt wird, folgendermaßen:

Code: Alles auswählen

zeit1=$(date "+%s.%N")
<auszuführende Zeilen>
zeit2=$(date "+%s.%N")
dauer=$( echo "$zeit2 - $zeit1" | bc )
Das funktioniert soweit ganz gut. Wenn ich $dauer mittels echo ausgebe, wird die Dauer in Sekunden ausgegeben, z.B. 844.989208485. Diese Darstellung gefällt mir aber nicht so gut. Ich würde zunächst gerne die ganzen Nachkommastellen loswerden (egal, ob die Zahl dabei gerundet oder abgeschnitten wird). Dann würde ich gerne die Dauer in Stunden, Minuten und Sekunden darstellen (in diesem Beispiel 00:14:05).
Wie stelle ich so etwas an? Google hat mir nicht sehr weitergeholfen.

rodney
Beiträge: 332
Registriert: 09.12.2016 04:15:59

Re: Shellscript: Zeitdauer darstellen

Beitrag von rodney » 01.12.2018 20:42:44

Bei Suchen ist es oft hilfreich englische Begriffe zu verwenden . Ich habe mal nach "shell date convert seconds to hours minutes" gesucht. Hoffe es hilft dir weiter: $(date -u -d @${dauer} +"%T")

Code: Alles auswählen

zeit1=$(date "+%s.%N")
<auszuführende Zeilen>
zeit2=$(date "+%s.%N")
dauer=$( echo "$zeit2 - $zeit1" | bc )
dauerhms=$(date -u -d @${dauer} +"%T")

Quelle mit Erklaerung: https://stackoverflow.com/questions/134 ... e-in-shell

Benutzeravatar
Phineas
Beiträge: 348
Registriert: 20.06.2012 20:26:19

Re: Shellscript: Zeitdauer darstellen

Beitrag von Phineas » 01.12.2018 22:11:08

rodney hat geschrieben: ↑ zum Beitrag ↑
01.12.2018 20:42:44
$(date -u -d @${dauer} +"%T")
Das funktioniert aber nur, solange die Dauer nicht größer ist als 24 Stunden.
katze123 hat geschrieben: ↑ zum Beitrag ↑
01.12.2018 20:30:49
Ich würde zunächst gerne die ganzen Nachkommastellen loswerden
Wieso lässt Du sie dann von date anzeigen? date +%s ohne .%N ist doch dann gut!? Dann klappt es auch mit den Arithmetikfähigkeiten der Shell (Bash?), Division und Modulo reichen dann aus.
(Ja gut: Wenn Stunden/Minuten/Sekunden unbedingt zweistellig sein sollen, braucht man noch etwas printf)

Antworten