私のログファイルの1つのタイムスタンプを検証したいと思います。ところが事件陳述書に出てくる表現に問題があるようです。
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]")