case文
case文は判定対象となる「値」と事前に作成した複数の「条件」を上から順に比較して、マッチした「条件」の「処理」を実行させることができます。
どの条件にもマッチしない場合は何も処理を実行しません。
cace文の書き方
処理を終了させるには「;;」セミコロンを2つ記述し、case文の終わりにはesac(caseの逆さま)と記述します。
case 値 in 条件1) 処理1 ;; 条件2) 処理2 ;; 条件3) 処理3 ;; esac
条件にマッチした場合に実行する処理は複数指定することもでき、処理が長くなる場合は改行して記述することもできます。
case 値 in
   条件1)
     処理1
     ;;
   条件2)
     処理2
     ;;
   条件3)
     処理3
     処理4
     処理5
     ;;
esac
どの条件にもマッチしなかった場合用の処理を指定する場合は、条件の最後に「*)」を設定するとどのパターンにも当てはまらない場合にこの条件が選択されます。
case 値 in
   条件1)
     処理1
     ;;
   条件2)
     処理2
     ;;
   条件3)
     処理3
     ;;
   *)         <---条件1~3に当てはまらない場合選択される
     処理4
     ;;
esac
条件の指定について
条件の指定にはワイルドカードを使用することが出来ます。
| * | すべてにマッチ | 
| ? | 何か1文字にマッチ | 
| [ ] | []に囲まれた文字や数字等のどれかにマッチ | 
| [! ] | []囲まれていない文字や数字等のどれかにマッチするのにマッチ | 
| [ - ] | 「-」で設定された範囲の文字や数字にマッチ | 
OR条件(どちらかにマッチ)を使用する場合は「 条件1 | 条件2 」といったように指定することで、複数の条件をまとめて指定することが出来ます。
「*」すべてにマッチ
「*」自体をマッチさせたい場合は「\*」「"*"」「'*'」といったようにエスケープします。
使用例
- * すべての文字列にマッチ(なんにでもマッチする)
 - abc* 「abc」で始まる文字列にマッチ
 - a*bc 「a」ではじまり「bc」で終わる文字列すべてにマッチ
 
「?」何か一文字にマッチ
「?」自体をマッチさせたい場合は「\?」「"?"」「'?'」といったようにエスケープします。
使用例
- ? 何か一文字にマッチ
 - ??? 何か3文字の文字列にマッチ
 - ???* 3文字以上の文字列にマッチ
 - a?c 最初が「a」で始まり最後が「c」で終わる3文字の文字列にマッチ
 
[ ]に囲まれた文字や数字等のどれかにマッチ
使用例
- [Aa] 「A」か「a」にマッチ
 - [Aa][Bb] 「AB」「Ab」「aB」「ab」にマッチ
 
[! ]に囲まれていない文字や数字等のどれかにマッチ
使用例
- [!Aa] 「A」と「a」以外にマッチ
 
[ - ]範囲指定
使用例
- [a-z] アルファベットの小文字にマッチ
 - [A-Z] アルファベット大文字にマッチ
 - [a-zA-Z] アルファベットの小文字と大文字にマッチ
 - [0-9] 数字の「0」から「9」にマッチ
 
「 | 」OR条件
使用例
- ABC | abc 「ABC」か「abc」のどちらかにマッチ
 - ABC | DEF | GHI 「ABC」「DEF」「GHI」のどれかにマッチ
 
サンプル
入力したキーによって、アルファベット、数字、その他の判別を行いメッセージを表示します。
#!/bin/bash
echo 'Please input alphabet or number'
read key
case "$key" in
  [a-zA-Z])  echo 'Alphabet entered' ;;
      [0-9])  echo 'Number entered' ;;
          *)  echo 'No alphabet or number enterd' ;;
esac
「T」を入力すると[a-zA-Z]の条件にマッチするので、「Alphabet entered」と表示されます。
$ sh case1.sh Please input alphabet or number T Alphabet entered
「0」を入力すると[0-9]の条件にマッチするので、「Number entered」と表示されます。
$ sh case1.sh Please input alphabet or number 0 Number entered
アルファベットと数字以外である「!」を入力すると「*」の条件にマッチするので、「No alphabet or number enterd」と表示されます。
$ sh case1.sh Please input alphabet or number ! No alphabet or number enterd
  
  
  
  
コメント
初めまして。
シェルスクリプト、勉強させていただきます。
師子乃さん
コメントありがとうございます。
何かお役に立てたのなら幸いです。