bashで日付の妥当性をチェックする
ずいぶん久々の更新です。
はてなブログってなんですか?
うそです。YAPCで発表聞いたので知ってます。
はてなBって書いたら、ブックマークなのかブログなのかわからんす。。。
日付妥当性
雑談はおいておいて、本題です。
yyyymmdd.log みたいなファイルを吐き出してて、そのファイル名をほげほげしようと思ったので、間違ったファイル処理してないかチェックしたいな、と思った。
1 #!/bin/bash 2 3 DATES="20110228 20110229" 4 for DATE in $DATES; do 5 if [ "`date +'%Y%m%d' -d $DATE 2> /dev/null`" == $DATE ]; then 6 echo "$DATE is ok" 7 else 8 echo "$DATE is ng" 9 fi 10 done
date に日付食わせて、同じフォーマットで表示して、結果==だったら、ok。
存在しない日付は、
date: invalid date
とか出るんで、errは捨て。
ダブルクォートで囲わないと、異なる型を比較してるってことで
./date.sh: line 5: [: ==: unary operator expected
こんな感じで怒られるんで、囲ってます。
結果
[ryoff@ryoff00 ~]$ ./date.sh 20110228 is ok 20110229 is ng