
ログ ファイルの 1 つについてタイムスタンプの検証を行いたいのですが、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 をチェックできないことです。
それを実行するにはいくつかの方法があります:
- 変数を分割し、各部分を個別にチェックするには:
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]")