내 로그 파일 중 하나의 타임스탬프에 대한 유효성을 검사하고 싶습니다. 그런데 사건진술서에 나오는 표현에 문제가 있는 것 같습니다.
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을 확인할 수 없다는 것입니다.
이를 수행하는 방법에는 여러 가지가 있습니다.
- 변수를 분할하고 각 부분을 개별적으로 조사하려면 다음을 수행하십시오.
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]")