シェルスクリプトの条件分岐(case)

2016年8月1日(更新: 2019年11月10日)

前のページでは 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
    

コメントを残す

メールアドレスが公開されることはありません。