GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Wie kann man feststellen, ob eine Dauer in mehreren Shell-Skripten über einer Stunde liegt?

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.


Linux
  1. So verwenden Sie Eingaben in Ihren Shell-Skripten

  2. So installieren Sie mehrere Linux-Distributionen auf einem USB

  3. Wie kann man feststellen, ob die Ausgabe eines Befehls oder Shell-Skripts Stdout oder Stderr ist?

  4. So führen Sie Python-Skripte von der Shell aus

  5. Was sind Shell-Skripte? Wie erstelle ich Shell-Skripte?

So erstellen Sie Shell-Skripte

So führen Sie mehrere Linux-Befehle in einem einzigen Befehl aus

So führen Sie unter Linux mehrere PDF-Dateien zu einem PDF zusammen

Wie verwende ich if-else in Shell-Skripten?

Wie liest man Befehlszeilenargumente in Shell-Skripten?

Wie kann ich mehrere Dateien über scp in einem Befehl kopieren?