半年ぶりにShellの記事を書いてみました。
今回はcase文についてです。
基本的な文法
1 2 3 4 5 6 7 8 9 |
case 文字列 in パターン1) パターン1にマッチした処理 ;; パターン2) パターン2にマッチした処理 ;; ... esac |
実行例:
case.sh
1 2 3 4 5 6 7 8 9 10 11 12 |
#!/bin/bash name=${1} case ${name} in taro) echo Hello Taro!! ;; hanako) echo Hello Hanako!!! ;; esac |
1 2 3 4 5 6 |
root@d6f6976ac747:/work/ch6# bash case.sh taro // taroにマッチ Hello Taro!! root@d6f6976ac747:/work/ch6# bash case.sh hanako // hanakoにマッチ Hello Hanako!!! root@d6f6976ac747:/work/ch6# bash case.sh shiro // 何も実行されない root@d6f6976ac747:/work/ch6# |
パターンの応用
「*」(ワイルドカード)などの記号と組み合わせたパス名展開をパターンに組み合わせることができる
パス名展開の記号表
記号 | 意味 |
? | 任意の1文字 |
* | 任意の文字列 |
[ ] | [ ]内に含まれる、いずれか1文字 |
[^ ]または[! ] | [ ]内に含まれない、いずれか1文字 |
case-2.sh
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
#!/bin/bash #!/bin/bash name=${1} case ${name} in 202?) echo ${name} Year ! ;; taka*) echo Hello ${name} ! ;; [a-z]) echo This is Alphabet ${name} ! ;; *) echo No match ! ;; esac |
1 2 3 4 5 6 7 8 |
root@d6f6976ac747:/work/ch6# bash case-2.sh 2021 2021 Year ! root@d6f6976ac747:/work/ch6# bash case-2.sh a This is Alphabet a ! root@d6f6976ac747:/work/ch6# bash case-2.sh takako Hello takako ! root@d6f6976ac747:/work/ch6# bash case-2.sh hoge No match ! |
パターンを「 | 」で区切って複数指定
「|」でパターンを区切るとOR扱いになる。
1 2 3 4 5 6 7 8 9 10 11 12 |
#!/bin/bash file=${1} case ${file} in *.jpg | *.png | *.gif) echo ${file} is Image! ;; *.mp4 | *.wav) echo ${file} is Movie! ;; esac |
1 2 3 4 5 6 7 8 |
root@d6f6976ac747:/work/ch6# bash case-3.sh sample.jpg sample.jpg is Image! root@d6f6976ac747:/work/ch6# bash case-3.sh sample.png sample.png is Image! root@d6f6976ac747:/work/ch6# bash case-3.sh sample.mp4 sample.mp4 is Movie! root@d6f6976ac747:/work/ch6# bash case-3.sh sample.wav sample.wav is Movie! |
まとめ
- case文を使うと変数が特定のパターンにマッチする処理を制御できる
- パターンにはパス名展開(*や[ ] など)を使うことができる
- | で区切るとパターンを複数指定できる