Bash > case文

更新日 2011-11-27
広告

case文の使い方を紹介します (GNU bash, version 4.1.5)。

case文の構文は以下のようになります。

case 変数 in
    値1)
        処理1
        ;;
 
    値2)
        処理2
        ;;

    値3-1 | 値3-2)
        処理3;;
 
    *)
        処理4
esac
上記の構文において、Bashは以下のように処理を行います。
  • 変数の値が値1ならば、処理1を実施
  • 変数の値が値2ならば、処理2を実施
  • 変数の値が値3-1または値3-2ならば、処理3を実施
  • 変数の値が値1や値2、値3-1, 3-2ではない場合、処理4を実施
また、以下のことが言えます。
  • 値には、文字列や数値を指定可能
  • 各処理の最後にはセミコロン(;)が2つ必要(ただし、最後の処理の場合は不要)
  • バーティカルバー(|)を利用して、2つ以上の条件を指定可能
  • アスタリスクを利用して、どんな変数でもヒットさせることが可能
サンプルスクリプト test-case.sh を以下に示します。スクリプトの最初の引数($1)を、case文の変数としています。
#!/bin/bash
 
case $1 in
    "start")
        echo "start!"
        echo "start something..." ;;
 
    stop)
        echo "stop!"
        ;;
 
    "hop" | step)
        echo "hop or step" ;;
 
    1)
        echo "One!";;

    *)
        echo "hogehogehoge"
esac
私の環境では、文字列をダブルクォーテーション(")で囲んでも囲まなくても、結果は同じでした。 また、セミコロンは処理の最後の行の後ろに記述してもよいです。 色々な引数を与えて、結果を見てみます。
test-case$ ./test-case.sh start
start!
start something...
test-case$ ./test-case.sh stop
stop!
test-case$ ./test-case.sh hop
hop or step
test-case$ ./test-case.sh step
hop or step
test-case$ ./test-case.sh aaaaaa
hogehogehoge
test-case$ ./test-case.sh
hogehogehoge
引数が無い場合も処理されています。
広告
お問い合わせは sweng.tips@gmail.com まで。
inserted by FC2 system