case文
BASHスクリプトにはswitch文に相当するのとしてcase文がある
あのswitch文に相当する.case文はスクリプトではよく使用されるようだ.
grep -l case /etc/init.d/*としたら,私のシステムでは51個中43個のスクリプトがマッチした.これらのスクリプトでは大抵オプション指定を調べるのに使用される.case文の構文を以下に示す.
case 変数 in パターン) 文(複数可) ;; パターン) 文(複数可) ;; パターン) 文(複数可) ;; ..... パターン) 文(複数可) ;; esaccase文では変数の値とマッチするパターンを見付け(ベストマッチではなくファーストマッチつまり最初にマッチしたものを採用),そのマッチしたパターンに続く文を実行する.文は複数記述でき,それらは他の文と;,&&,||,|,改行でつなぐ.で,文の最後に;;を記述して,次のパターンの記述を続ける.パターンは|でor連結ができ,さらに[]の展開やワイルドカード*を使用できる.以下に例を示す.
case "$x" in "hoge") echo hoge ;; "hoge" | "HOGE") echo hogeHOGE;; [Hh][Oo][Gg][Ee]) echo hOGe;; "hoge"*) echo hogefuga;; *) echo No match!!;; esac
- 変数xがhogeだった場合
- 最初のパターンとマッチするのでhogeと出力する.この場合全てのパターンにもマッチするが,最初にマッチするパターンの文だけを実行する(echo hogeHOGE等は実行されない).
- 変数xがhogeまたは(|)HOGEだった場合
- 二番目のパターンとマッチするのでHOGEと出力する.この場合,三番目のパターンにもマッチするが,無視される.二番目のパターンはhogeまたはHOGEにマッチする(上記のようにhogeとのマッチは一番目のパターンに持って行かれるが).
- 変数xがhOGeとか,hogEなどのようにhogeのうち,0文字以上四文字以下が大文字の場合
- 三番目のパターンとマッチするのでhOGeと出力する(上記のようにhogeとHOGEは先の二つのパターンに持って行かれる).[]が展開されて,[Hh][Oo][Gg][Ee]がHogeとかHOgEなどとマッチしている.
- 変数xがhogeに0文字以上付加した場合
- 四番目のパターンにマッチするのでhogefugaと出力する(hogeは最初のパターンに持って行かれる).
- デフォルト
- 五番目のパターンには必ずマッチする.これはスクリプトのパラメータチェックでよく使われる技(?).この例では上記四つのどのパターンにもマッチしなかった場合の処理としてNo match!!と出力する.

