Table of Contents
前のページでは if文 を使った処理の場合分けを解説しました。このページでは case文 を使ったもう一つの条件分岐の方法を紹介します。
case文
case文 を使います。条件分岐が多いときは、if文よりもcase文で書いた方がすっきりします。書き方は次の通りです。
case 変数 in
パターン1) 処理1 ;;
パターン2) 処理2 ;;
...
パターンn) 処理n ;;
*) 上で指定したパターンに当てはまらなかった場合の処理 ;;
esac
指定した変数の中身が、どのパターンと一致しているかを調べ、一致したパターンの処理を行います。例えば、第一引数の数値によって処理を分岐させるときは、次のようにします。
case ${1} in
1) echo "処理1" ;;
2) echo "処理2" ;;
*) echo "それ以外" ;;
esac
この例では、第一引数が 1 であれば「処理1」と表示、第一引数が 2 であれば「処理2」と表示し、それ以外の場合は「それ以外」と表示します。
パターン
パターンの部分には、数値や文字列、変数、正規表現を使うことができます。また *) は省略できます。そうした場合、パターンで指定したもの以外の入力のときは何も起こりません。
case ${1} in
12) echo "数値の12です。" ;;
"aaa") echo "文字列aaaです。" ;;
[0-9]) echo "0から9の数値です。" ;;
esac
1つのパターンに複数のものを含める
2つ以上のパターンを1つにまとめることができます。例を示します。
case ${1} in
12 | 24) echo "数値の12か24です。" ;;
"aaa" | 100 | 200) echo "文字列aaaか数値の100か200です。" ;;
esac
練習問題
case文を使って、以下の条件を満たすシェルスクリプトを作ってください。
- 2つの数値を実行時引数として入力する。
- 第一引数と第二引数が同じ数値だったら「第二引数の数値と同じです」と表示。
- 第一引数が 3 または 6 だったら「第一引数が3か6です」と表示。
- それ以外の場合、第一引数と第二引数を並べて表示。
答え(クリックで開く)
#!/bin/bash
case ${1} in
${2}) echo "第二引数の数値と同じです" ;;
3 | 6) echo "第一引数が3か6です" ;;
*) echo ${1}${2} ;;
esac
