Script de validação de formato de data Unix

0

Eu escrevi este pequeno shell script unix para validar o formato da data. Meu script deve verificar se a string está no formato YYYYMMDDHHMISS. Se não estiver neste formato, deverá enviar uma mensagem de erro.

Por exemplo, declarei uma variável a e atribui um valor a ela.

a=20150620223405
date "+%Y%m%d%H%M%S" -d $a > /dev/null 2>&1
if [ $? -ne 0 ]
then
echo "Invalid format"
else
echo "Valid format"
fi 

Ele sempre mostra "Inválido" .Eu quero saber qual é o erro aqui e como proceder .. obrigado

    
por Pari Sairam Mohan 20.06.2015 / 19:41

1 resposta

1

O motivo pelo qual seu teste falha é porque o teste de condição usa um valor $? diferente de zero. A razão pela qual é diferente de zero é porque date está produzindo um status de saída diferente de zero. Se você parar de descartar temporariamente o stderr do date com o > /dev/null 2>&1 , verá a mensagem de erro que está sendo produzida. Isso ajudará você a identificar o problema.

date: invalid date ‘20150620223405’

O que date está dizendo é que seu formato de data não é aceitável.

Você pode tentar isso:

a=20150620223405
b=$(echo "$a" | sed 's/^\(....\)\(..\)\(..\)\(..\)\(..\)\(..\)$/-- ::/')
c=$(date "+%Y%m%d%H%M%S" -d "$b" 2>/dev/null)
if test $? -eq 0 -a "$c" = "$a"
then
    echo ok
else
    echo not ok
fi
    
por 20.06.2015 / 20:07