Como comparar esses valores (data) no bash

1

Eu preciso comparar duas sequências da seguinte formatação:

2013-12-31T00:00:00
2014-11-19T15:40:30

É um formato personalizado de data e hora. Eu tentei coisas diferentes, nenhuma funcionou:

if [ ${val1} < ${val2} ] || [ ${val1} == ${val2} ]; then ...

ou

if [ ${val1} <= ${val2} ]

ou

if [[ ${val1} -el ${val2} ]]

Obrigado pessoal!

    
por Michael Niemand 19.11.2014 / 15:44

1 resposta

3

O Bash tem sua própria sintaxe de teste, em que você pode usar > e < :

$ val1=2013-12-31T00:00:00
$ val2=2014-11-19T15:40:30
$ [[ $val1 > $val2 ]]
$ echo $?
1
$ [[ $val1 < $val2 ]]
$ echo $?
0

Como alternativa, você pode usar carimbos de data / hora do Unix e comparar os valores inteiros :

$ val1=$(date --date='2013-12-31T00:00:00' +%s)
$ val2=$(date --date='2014-11-19T15:40:30' +%s)
$ [ $val1 -gt $val2 ]
$ echo $?
1
$ [ $val1 -lt $val2 ]
$ echo $?
0
    
por 19.11.2014 / 15:57