2017年1月19日

13日の金曜日を探す

ことしから10年間の「13日の金曜日」を列挙するbash oneliner。
科学的にはなんの特別なこともない日だけど、bashのfor文の練習に。

$ for y in {2017..2026}
> do
> for m in {1..12}
> do
> ncal $m $y | grep '^金.*13' > /dev/null
> if [ $? -eq 0 ]
> then echo "$y"年"$m"月13日は金曜日だ。
> else :
> fi
> done
> done

味噌は、
  • for は入れ子にできる。
  • calでなく、同じ曜日の日を1行に並べるncalを使っている。
  • ncalの出力からgrepで13日の金曜日を選んでるけれど、それ自体の出力は/dev/nullに捨てて、そのかわりに返り値(マッチが成功した場合に0を返す)を利用している。

なお、ncalの出力はこんな形になっている。
$ ncal 1 2017
    1月 2017
月     2  9 16 23 30
火     3 10 17 24 31
水     4 11 18 25
木     5 12 19 26
金     6 13 20 27
土     7 14 21 28
日  1  8 15 22 29

ubuntuのncalは当日をハイライト表示するけれど、そのエスケープシークエンスがじゃまなので、ハイライト抑止オプション -h を付ける必要がある。

0 件のコメント: