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