GNU/Linux >> Znalost Linux >  >> Linux

Porovnání dat v Bash

Lexikograficky můžete porovnat s podmíněným konstruktem [[ ]] tímto způsobem:

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

Od muže:

[[výraz]]
Vrátí stav 0 nebo 1 v závislosti na vyhodnocení výrazu podmíněného výrazu.

Nová aktualizace:

Pokud potřebujete porovnat časy s různými časovými pásmy, můžete tyto časy nejprve převést tímto způsobem:

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

Jednou z možností by bylo převést datum na počet sekund od epochy UNIX:

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

Toto celé číslo pak můžete porovnat s jiným datem, které bylo zpracováno stejným způsobem:

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

(( )) syntaxe se používá k vytvoření aritmetického kontextu, když porovnáváme dvě čísla. Můžete také použít obecnější [ ${x} -lt ${y} ] syntaxe stylu, pokud jde o přenositelnost.

Jednou z výhod tohoto způsobu je, že date rozumí například různým formátům
date -d "next year" +%s . Dále date rozumí časovým pásmům, takže dokáže správně zpracovat srovnání mezi dvojicemi dat, kde se časové pásmo liší.

Pokud se vás však ani jeden z těchto problémů netýká, šel bych po řešení j.a.


Linux
  1. Získat mtime konkrétního souboru pomocí Bash?

  2. Převést formáty data v bash

  3. odečíst dny od data v bash

  1. zkontrolujte, zda je argument platným datem v bash shellu

  2. Jak získat datum/čas vytvoření souboru v Bash/Debian?

  3. Získejte včerejší datum v bash na Linuxu, DST-safe

  1. Proměnná exportu Bash

  2. Bash - příkaz Datum a mezera

  3. Jak přidat časové razítko do protokolu skriptu bash?