
Gostaria de fazer a validação do carimbo de data/hora de um dos meus arquivos de log. Mas parece que tenho problemas na minha expressão na declaração de caso.
O valor de TIME pode ser algo como 11:49 ou 2011. E eu só quero verificar se está no formato HH:MM ou não. O código está abaixo.
Está sempre dizendo o formato do ano, embora o arquivo esteja no formato HH:MM
#!/usr/bin/ksh
TIME=`ls -lrth /var/log/*.log | grep -i upg | tail -1 | awk '{print $8}'`
echo "$TIME"
validation=false
if [[ $TIME != "" ]]
then
case TIME in
"[0-23]+ :[0-59]")
validation=true
break;;
*) echo "Year format";;
esac
fi
echo "$validation
Atualização: tentei "[0-2][0-9]:[0-5][0-9]") mas a validação ainda falha no retorno.
Responder1
O problema é que você não pode verificar TIME com [0-23]+ :[0-59]
expressão.
Há várias maneiras de fazer isso:
- Para dividir sua variável e verificar cada parte separadamente:
TIME="06:25" ;
[[ $TIME != "" ]] && \
[ ${TIME%:*} -le 23 -a ${TIME%:*} -ge 0 -a \
${TIME#*:} -le 59 -a ${TIME#*:} -ge 0 ] && echo ok
- Para verificar com regex comum, mas aceitará alguns casos de horário errado (como 28:59):
"[0-2][0-9]:[0-5][0-9]")