
Я хотел бы сделать проверку о временной метке одного из моих файлов журнала. Но, похоже, у меня проблема с выражением в операторе case.
Значение TIME может быть чем-то вроде 11:49 или 2011. И я просто хочу проверить, является ли это форматом HH:MM или нет. Код ниже.
Он всегда говорит формат года, хотя файл в формате 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
Обновление: я попробовал «[0-2][0-9]:[0-5][0-9]»), но проверка все равно не прошла.
решение1
Проблема в том, что вы не можете проверить ВРЕМЯ с помощью [0-23]+ :[0-59]
выражения.
Есть несколько способов сделать это:
- Чтобы разделить переменную и проверить каждую часть отдельно:
TIME="06:25" ;
[[ $TIME != "" ]] && \
[ ${TIME%:*} -le 23 -a ${TIME%:*} -ge 0 -a \
${TIME#*:} -le 59 -a ${TIME#*:} -ge 0 ] && echo ok
- Чтобы проверить это с помощью обычного регулярного выражения, но оно примет некоторые случаи неправильного времени (например, 28:59):
"[0-2][0-9]:[0-5][0-9]")