Ich versuche, die Laufzeit zu überprüfen, und wenn es mehr als eine Stunde ist, wird ein Fehler zurückgegeben, aber der Code gibt zeitweise falsch positive Ergebnisse zurück. In firstRun.sh
, lese ich die Zeit als:
export START_H=`date +%H`
export START_M=`date +%m`
und in secondRun.sh
Ich überprüfe die Zeit wie folgt:
CURRENT_H=`date +%H`
CURRENT_M=`date +%M`
TIME=`expr $CURRENT_H - $START_H`
if [ $TIME -gt 0 ] && [ $START_M -lt $CURRENT_M ]; then
echo "boot time is more than an hour"
fi
Kann mir jemand helfen, wo das Problem liegen könnte? Gibt es einen Unterschied zwischen der Verwendung von &&
und -a
in if-Anweisung? Oder irgendein Unterschied zwischen der Verwendung von []
und ()
?
Akzeptierte Antwort:
export BOOT_TIME=$(date +%s)
current=$(date +%s)
(( current - BOOT_TIME >3600 )) && echo "More than an hour"
%s
gibt Sekunden seit dem 01.01.1970 00:00:00 UTC zurück.
Diskussion:Warum Sekunden besser sind
Angenommen, die Start- (Boot-) Zeit ist 23:00 Uhr und die aktuelle Uhrzeit 00:23 Uhr. Dann $TIME
ist negativ und das wird nicht funktionieren:
if [ $TIME -gt 0 ] && [ $START_M -lt $CURRENT_M ]; then
echo "boot time is more than an hour"
fi
Angenommen, die Startzeit ist 12:03 Uhr und die aktuelle Uhrzeit 14:00 Uhr. Dann funktioniert das obige auch nicht, diesmal wegen des Minutentests.