2017-02-10 6 views
3

Ich habe ein Bash-Skript, das Dateien von einer Website über seine API herunterlädt, und ich wollte am Ende eine Sache implementieren (für einen Mangel an besseren Wörtern), die anzeigen würde, wie lange es dauerte, bis das Skript fertig war. Mit diesem Code, ich war in der Lage, es zu tun:Wie übersetzt man Sekunden in Minuten und Sekunden in Bash?

#!/bin/bash 
SECONDS=0 

# -- Code to Execute -- 

echo "Task complete" 
echo "Script completed in $(echo "scale=2; $SECONDS/60" | bc) minutes" 

Dies würde jedoch die Zeit, zeigt das Skript in Bruchteilen einer Minute auszuführen hat:

Task complete 
Script completed in 1.35 minutes 

Wie würde ich in der Lage sein, zu übersetzen Wie viele Sekunden hat das Skript in Minuten und Sekunden verarbeitet? Wie folgt aus:

Task complete 
Script completed in 1 minute and 12 seconds 
+0

Ich möchte, dass es nur einen numerischen Wert für die Zeit anzeigt, die das Skript in beiden Minuten und Sekunden benötigt, wie Codeforest Antwort hat getan. (Beispiel, übersetze 72 Sekunden zu 1 Minute und 12 Sekunden) – jramos775

Antwort

3

Bash ist gut bei einfacher Integer-Mathematik:

total_time=100 
minutes=$((total_time/60)) 
seconds=$((total_time % 60)) 
echo "Script completed in $minutes minutes and $seconds seconds" 
# output -> Script completed in 1 minutes and 40 seconds 
5

können Sie verwenden, um die Integer-Division und Modulo-Operatoren in der Schale:

echo "Script completed in $((SECONDS/60)) minutes and $((SECONDS%60)) seconds" 

Wenn Sie verlassen wollen aus den Sekunden- und Minuten-Teilen, wenn sie Null sind, ist es ein wenig komplizierter:

if ((SECONDS/60 == 0)); then 
      echo "Script completed in $SECONDS seconds" 
elif ((SECONDS%60 == 0)); then 
    echo "Script completed in $((SECONDS/60)) minutes" 
else 
    echo "Script completed in $((SECONDS/60)) minutes and $((SECONDS%60)) seconds" 
fi 

(Es werden immer noch Dinge wie "1 Minute" und nicht "1 Minute" angezeigt; Du könntest das auch reparieren, wenn du es noch komplizierter machen willst ...)

+0

Deine Antwort hätte auch funktioniert, aber da es ein bisschen außerhalb des Ausmaßes ist, für das ich es brauche, ging ich voran und akzeptierte die Codeforest-Antwort. Danke für deine Antwort! – jramos775

Verwandte Themen