
我想對我的日誌文件之一的時間戳進行驗證。但我在case語句中的表達似乎有問題。
TIME 值可能類似於 11:49 或 2011。代碼如下。
儘管文件採用 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]")