Lから始まるLinux

3章6話
case文(使い方)
3章7話 case文(実践)
もくじ
3章8話
for文(使い方)
case文(実践)
若木 みどり
前回はcase文の 使い方を学んだね!
若木 しげる
今回はcase シェルスクリプトを 書いていこう!
実践
若木 しげる
おみくじの改良版 omikuji2 を作ろう! エディタを開いて 準備してね
vim omikuji2
若木 みどり(笑顔)
うん!どんな内容か楽しみ!
若木 しげる
内容は以下のとおりだよ!
#!/bin/bash

OMIKUJI="$((RANDOM % 10))"

case "$OMIKUJI" in
  0)
    echo "大吉"
    ;;
  1|2)
    echo "中吉"
    ;;
  3|4|5)
    echo "小吉"
    ;;
  *)
    echo "吉"
    ;;
esac

若木 みどり
算術式展開 $(( ... ))RANDOM 変数を使っているねRANDOM 変数をいきなり使っているけど大丈夫なのかな?
OMIKUJI="$((RANDOM % 10))"
若木 しげる
RANDOM 変数はシェルが用意している特別な変数だよ値を参照するたびに0以上のランダムな数値を返すんだ
若木 みどり
じゃあここの算術式展開ではランダムな数を 10 で割った余りを求めているんだね!
若木 みどり
でも…どうして余りを使うんだろう?
若木 しげる
10 で割れば余りは0 から 9 までの10 通りになるんだ
若木 しげる
RANDOM 変数は大きな範囲の数を出すけど剰余を使えば簡単に範囲を絞れるんだよ
若木 みどり(驚き)
なるほど!ランダムな値を0 から 9 の範囲に絞っているのね!

若木 しげる
いよいよcase文に入っていくよ
case "$OMIKUJI" in
  0)
    echo "大吉"
    ;;
  1|2)
    echo "中吉"
    ;;
  3|4|5)
    echo "小吉"
    ;;
  *)
    echo "吉"
    ;;
esac
若木 みどり
これは分かりやすいね!OMIKUJI 変数の値によって条件が分かれていてそれぞれの処理でおみくじの結果を表示しているんだね
OMIKUJI 変数の値表示される内容
0大吉
1, 2中吉
3, 4, 5小吉
上記以外(6, 7, 8, 9)
若木 しげる
そのとおり!1|2) と書けば「1または2」だし*) を使えば「どの条件にも当てはまらなかった場合」わかりやすく書けるんだ
まとめ
若木 みどり
今回はcase文を使ってシェルスクリプトを書いたよ!
若木 みどり(笑顔)
最初に書いたおみくじは結果を 10 行生成して9 行捨てていたけど今回はスッキリしていて効率的だね!
若木 しげる
こんなふうにいくつか分岐があってその中から一つ処理を選ぶという場合はcase文が有効に使えるよ