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

Datumsvergleich in Bash

Lexikografisch kann man mit dem Bedingungskonstrukt [[ ]] vergleichen auf diese Weise:

[[ "2014-12-01T21:34:03+02:00" < "2014-12-01T21:35:03+02:00" ]]

Von dem Mann:

[[ Ausdruck ]]
Gibt einen Status von 0 oder 1 zurück, abhängig von der Auswertung des bedingten Ausdrucks expression.

Neues Update:

Wenn Sie Zeiten mit unterschiedlichen Zeitzonen vergleichen müssen, können Sie diese Zeiten zunächst folgendermaßen konvertieren:

get_date() {
    date --utc --date="$1" +"%Y-%m-%d %H:%M:%S"
}

$ get_date "2014-12-01T14:00:00+00:00"
2014-12-01 14:00:00

$ get_date "2014-12-01T12:00:00-05:00"
2014-12-01 17:00:00

$ [[ $(get_date "2014-12-01T14:00:00+00:00") < $(get_date "2014-12-01T12:00:00-05:00") ]] && echo it works
it works

Eine Möglichkeit wäre, das Datum in die Anzahl der Sekunden seit der UNIX-Epoche umzuwandeln:

date -d "2014-12-01T21:34:03+02:00" +%s

Sie können diese Ganzzahl dann mit einem anderen Datum vergleichen, das auf die gleiche Weise verarbeitet wurde:

(( $(date -d "2014-12-01T21:34:03+02:00" +%s) < $(date -d "2014-12-01T21:35:03+02:00" +%s) ))

Die (( )) Syntax wird verwendet, um einen arithmetischen Kontext zu erstellen, wenn wir zwei Zahlen vergleichen. Sie können auch den allgemeineren [ ${x} -lt ${y} ] verwenden Style-Syntax, wenn Portabilität ein Problem darstellt.

Ein Vorteil dabei ist, dass date versteht zum Beispiel eine Vielzahl von Formaten
date -d "next year" +%s . Außerdem date versteht Zeitzonen, sodass Vergleiche zwischen Datumspaaren mit unterschiedlichen Zeitzonen korrekt verarbeitet werden können.

Wenn Sie jedoch keines dieser Probleme betrifft, würde ich mich für die Lösung von j.a. entscheiden.


Linux
  1. Mtime einer bestimmten Datei mit Bash abrufen?

  2. Konvertieren Sie Datumsformate in Bash

  3. Überprüfen Sie, ob das Argument ein gültiges Datum in der Bash-Shell ist

  4. Holen Sie sich das gestrige Datum in Bash unter Linux, DST-sicher

  5. subtrahieren Sie Tage von einem Datum in Bash

Bash-Case-Statement

Datumsbefehl in Linux

Bash if..else-Anweisung

Bash-Arrays

Bash Shebang

So verwenden Sie den Datumsbefehl in Bash-Skripten unter Linux