
Me gustaría validar la marca de tiempo de uno de mis archivos de registro. Pero parece que tengo un problema con mi expresión en la declaración del caso.
El valor de HORA podría ser algo así como 11:49 o 2011. Y solo quiero comprobar si tiene formato HH:MM o no. El código está a continuación.
Siempre dice formato de año aunque el archivo está en 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
Actualización: probé "[0-2][0-9]:[0-5][0-9]") pero la validación aún falla.
Respuesta1
El problema es que no puedes verificar el TIEMPO con [0-23]+ :[0-59]
expresión.
Hay varias formas de hacerlo:
- Para dividir su variable y verificar cada parte por separado:
TIME="06:25" ;
[[ $TIME != "" ]] && \
[ ${TIME%:*} -le 23 -a ${TIME%:*} -ge 0 -a \
${TIME#*:} -le 59 -a ${TIME#*:} -ge 0 ] && echo ok
- Para verificarlo con expresiones regulares comunes, pero aceptará algunos casos de hora incorrecta (como 28:59):
"[0-2][0-9]:[0-5][0-9]")