このページで解説している内容は、以下の YouTube 動画の解説で見ることができます。
Linuxコマンドの基本:シェルスクリプトのcase文

シェルスクリプトのcase文
case
文は、指定された文字列が特定のパターンにマッチするかを判断し、マッチしたパターンに対応する処理を実行するための制御構造です。複数の条件に基づいて異なる処理を行いたい場合に、if
文よりも簡潔に記述できます。

case文の基本構造
まず、case
文の基本的な構造を確認しましょう。
case <文字列> in
<パターン1>)
# 処理1
;;
<パターン2>)
# 処理2
;;
*)
# デフォルトの処理
;;
esac
<文字列>
:評価対象の文字列や変数。<パターン>
:マッチさせたい文字列パターン。ワイルドカード(*
、?
)が使用可能。;;
:各パターンの処理の終了を示す。*)
:上記のパターンにマッチしなかった場合のデフォルト処理。esac
:case
の終了を示す(case
を逆から綴ったもの)。
case
文は、指定された文字列が上から順に各パターンにマッチするかを評価し、マッチしたパターンの処理を実行します。どのパターンにもマッチしなければ、*
パターンの処理を実行します。
例1:曜日に応じたメッセージ表示(weekday.sh
)
このスクリプトは、現在の曜日に応じて異なるメッセージを表示します。
スクリプトの作成
user01@ubuntu:~$ nano weekday.sh
weekday.sh
の内容
#!/bin/bash
day_of_week=$(date +%u)
case "$day_of_week" in
1)
echo "今日は月曜日です。1週間の始まりです。"
;;
5)
echo "今日は金曜日です。週末が近いです!"
;;
6|7)
echo "今日は週末です。ゆっくり休みましょう。"
;;
*)
echo "今日は平日です。頑張りましょう。"
;;
esac
解説
day_of_week=$(date +%u)
:date
コマンドで曜日を数値(1〜7)で取得します(1が月曜日、7が日曜日)。case "$day_of_week" in
:取得した曜日を評価します。6|7)
:土曜日(6)または日曜日(7)の場合にマッチします。*)
:上記以外の場合(火〜木曜日)にマッチします。
実行権限の付与
user01@ubuntu:~$ chmod +x weekday.sh
スクリプトの実行
user01@ubuntu:~$ ./weekday.sh
実行結果の例
・月曜日の場合
今日は月曜日です。1週間の始まりです。
・金曜日の場合
今日は金曜日です。週末が近いです!
・土曜日または日曜日の場合
今日は週末です。ゆっくり休みましょう。
・火曜日〜木曜日の場合
今日は平日です。頑張りましょう。
解説
- スクリプトは現在の曜日に応じて適切なメッセージを表示します。
例2:簡易電卓スクリプト(calculator.sh
)
このスクリプトは、コマンドライン引数で指定した演算子に応じて計算を行います。
スクリプトの作成
user01@ubuntu:~$ nano calculator.sh
calculator.sh
の内容
#!/bin/bash
if [ $# -ne 3 ]; then
echo "使用法: $0 数値1 演算子 数値2"
echo "演算子: add, sub, mul, div"
exit 1
fi
num1=$1
operator=$2
num2=$3
case "$operator" in
add)
result=$((num1 + num2))
echo "$num1 + $num2 = $result"
;;
sub)
result=$((num1 - num2))
echo "$num1 - $num2 = $result"
;;
mul)
result=$((num1 * num2))
echo "$num1 * $num2 = $result"
;;
div)
if [ "$num2" -eq 0 ]; then
echo "エラー: 0で割ることはできません。"
exit 1
fi
result=$((num1 / num2))
echo "$num1 / $num2 = $result"
;;
*)
echo "不正な演算子です。使用可能な演算子: add, sub, mul, div"
exit 1
;;
esac
解説
if [ $# -ne 3 ]; then
:引数が3つでなければ使用方法を表示して終了します。num1
、operator
、num2
に引数を代入します。case "$operator" in
:演算子を評価します。add
、sub
、mul
、div
の場合に対応する計算を行います。div
の場合、num2
が0でないかを確認します。*)
:不正な演算子が指定された場合のエラーメッセージを表示します。
実行権限の付与
user01@ubuntu:~$ chmod +x calculator.sh
スクリプトの実行
1.加算の例
user01@ubuntu:~$ ./calculator.sh 10 add 5
10 + 5 = 15
2.減算の例
user01@ubuntu:~$ ./calculator.sh 10 sub 3
10 - 3 = 7
3.乗算の例
user01@ubuntu:~$ ./calculator.sh 4 mul 6
4 * 6 = 24
4.除算の例
user01@ubuntu:~$ ./calculator.sh 20 div 4
20 / 4 = 5
5.0での除算エラーの例
user01@ubuntu:~$ ./calculator.sh 10 div 0
エラー: 0で割ることはできません。
6.不正な演算子の例
user01@ubuntu:~$ ./calculator.sh 10 mod 3
不正な演算子です。使用可能な演算子: add, sub, mul, div
解説
- スクリプトは指定された演算子に応じて計算を行い、結果を表示します。
- 不正な入力やエラー条件も適切に処理します。
作成したシェルスクリプトの削除
user01@ubuntu:~$ rm weekday.sh calculator.sh
まとめ
case
文の活用:指定した文字列がパターンにマッチするかを判断し、対応する処理を実行できます。複数の条件を扱う際にif
文よりも簡潔に記述できます。- パターンの指定:ワイルドカード(
*
、?
)や複数のパターン(|
)を使用して柔軟に条件を設定できます。 - デフォルト処理:
*
パターンを使用して、どのパターンにもマッチしなかった場合の処理を定義できます。 - 実用的な例:曜日に応じたメッセージ表示や、演算子に基づく計算など、
case
文はさまざまな場面で活用できます。
case
文を使うことで、シェルスクリプトの可読性と効率性を向上させることができます。複雑な条件分岐を簡潔に記述できるため、スクリプトの保守性も高まります。ぜひ、実際のスクリプト作成でcase
文を活用してみてください。