制御構文 IF / CASE
システム管理者 Unixパワーユーザのためのコマンドリファレンス

[ Linux / Unix リファレンスガイド ] ⇒ [ シェルスクリプト ] ⇒ [ 制御構文 IF / CASE ]


シェルスクリプト - 制御構文 IF / CASE

IF


■基本的な書式
シェルプログラミング初期でぜひマスターしたい処理。

if [ 条件式1 ]
then
   処理1
elif [ 条件式2 ]
then
   処理2
else
   処理3  (※上のどの条件にも合致しない場合の処理を記述)
fi


場合分けの分岐をいくつも続けたい場合はelifを用いて、条件式を増やしていく。elifやelseに記述すべき処理がない場合は省略してもかまわない。

if [   条件式A ]
then
   処理A
fi 

■サンプルスクリプト
rootのホームディレクトリに .bashrc が存在するか確認するスクリプト。もしあれば、.bashrc found、なければ .bashrc not found と出力する。


#!/bin/sh
if [ -e /root/.bashrc ]
then
   echo ".bashrc found"
else
   echo ".bashrc not found"
fi 



CASE

Unix/Linuxの各種デーモンの起動スクリプトはオプション別に処理を定義した関数を用意し、CASEで関数を選ばせるのが定番の構成。自作のアプリケーション開発でも非常に便利。


■基本的な書式
変数とパターンが合致した場合、処理が走る。上で定義された全てに合致しない場合、 * (アスタリスク) に書かれた処理が走る。

case 変数 in
   パターン1)
      処理1 ;;
   パターン2)
      処理2 ;;
   パターン3)
      処理3 ;;
   *)
      処理4 ;;
esac  


■基本的な書式2
処理は複数行に渡って記述することも可能で、パターンは|で区切り、複数のパターンを検査することができる。
また、パターンマッチングが可能で 001* のパターンの場合、変数が 0010 0011 0019 などであればマッチし、処理が走る。

case 変数 in
  パターン1 | パターン2 | パターン3 )
            処理A ;;
  パターン4)
            処理B1
            処理B2
            処理B3 ;;
  *)
            処理C ;;
esac



■サンプルスクリプト
0から9の数字一つが押されると Number を表示、aからzのアルファベットの大文字か小文字が一文字入力されると Alphabet を表示、& を入力すると &、その他が入力された場合は Error を表示するスクリプト。マッチングに正規表現を利用している。
readコマンドにより、キーボードからの入力が変数 key_input に代入される。

※ 正規表現 [0-9]は0から9までの数字を表し、[a-zA-Z]は大文字小文字のアルファベットを表す。
※ &の前の\はエスケープ文字。特殊な文字を入力する際につける必要がある。

#!/bin/sh

echo "press any key ( number or alphabet )"
read key_input

case ${key_input} in
    [0-9])     echo "Number" ;;
    [a-zA-Z])  echo "Alphabet" ;;
    \&)        echo "&" ;; 
    *)         echo "Error" ;;
esac

実行例
press any key ( number or alphabet )
B
Alphabet





(c) 2012 - 2015 copyright oskp.net all rights reserved.