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