Compare duas vezes no formato HH: MM: SS - ksh

1

É possível comparar duas vezes (formato de 24 horas)? O que eu preciso é apenas verificar se a primeira vez é anterior à segunda vez.

Exemplo:

$ ./script.ksh 09:30:15 13:00:34
okay
$ ./script.ksh 05:25:00 02:30:50
invalid arguments
    
por erin00 16.10.2015 / 08:00

2 respostas

1

Quando esses dois valores estão em uma variável como esta:

a="09:30:15"
b="13:00:34"

Você pode usar isso para comparar esses valores (com ksh93 ):

[ "${a//':'}" -lt "${b//':'}" ] && echo "okay" || echo "invalid arguments"

Isso usa ksh s expansão do parâmetro ${parameter//pattern/string} . A partir do manpage:

Expands parameter and replaces the longest match of pattern with the given string. [...] Each match for pattern is replaced by the given string.

Portanto, 09:30:15 expande para 093015 e 13:00:34 para 130434 . Esses são números inteiros que podem ser comparados pelo utilitário test . Na página do manual:

   INTEGER1 -lt INTEGER2
          INTEGER1 is less than INTEGER2

Editar : com ksh88 , que não tem o recurso ${parameter//pattern/string} , você deve remover o : com sed primeiro e comparar os valores:

a="$(printf '%s' "$a" | sed -e 's/://g')"
b="$(printf '%s' "$b" | sed -e 's/://g')"
[ "$a" -lt "$b" ]  && echo "okay" || echo "invalid arguments"
    
por 16.10.2015 / 08:21
0
ksh -c '
    IFS=: x=2
    set ${0+09:30:15} ${0+13:00:34}
    for t do eval "
        [ ${t#0} -lt \"\${$((x+=1))#0}\" ]" && break
    done &&
    echo "$1:$2:$3 is earlier than $4:$5:$6"
'
09:30:15 is earlier than 13:00:34
    
por 16.10.2015 / 08:28