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