ケースステートメント bash スクリプトでは、複数の選択肢に対して決定を下す必要がある場合に使用されます。言い換えれば、式が複数の値を持つ可能性がある場合に便利です。この方法は、スクリプト内の複数の if ステートメントの代替として見ることができます。 Case ステートメントは、コードの可読性が向上し、保守が容易であるため、if ステートメントよりも優れています。 Bash スクリプトの Case ステートメントは、C 言語の Case ステートメントと非常に似ています。ただし、C とは異なり、Bash Case ステートメントは一致が発生するとすぐに検索の続行を停止します。簡単に言えば、パターンの検索をさらに停止するために C で使用することが必須である Break ステートメントは必要ありません。
case ステートメントの基本的な構文を以下に示します。
構文:
case EXPRESSION in Pattern_Case_1) STATEMENTS ;; Pattern_Case_1) STATEMENTS ;; Pattern_Case_N) STATEMENTS ;; *) STATEMENTS ;; esac>
case ステートメントがどのように機能するかは次のとおりです。
EXPRESSION>一致を見つけるためにさまざまなパターン (ケース) に対して評価される変数または値です。- case ステートメントはキーワードで始まります
case>続いてEXPRESSION>評価されること。 - 各ケースは次のように定義されます。
Pattern_Case>と比較される特定の値またはパターンを表すEXPRESSION>。 - それぞれの後に
Pattern_Case>、次の場合に実行されるステートメントがあります。EXPRESSION>特定のものと一致しますPattern_Case>。これらのステートメントは次のように表されます。STATEMENTS>。 - の
;;>それぞれの終わりにSTATEMENTS>block は case ブロックの終わりを示します。 - の
*)>これは、デフォルト ケースとして知られる特殊なケースです。前のパターンのどれも一致しない場合は、EXPRESSION>、STATEMENTS>下*)>ブロックが実行されます。 - の
esac>キーワードは case ステートメントの終わりを示します。
- 一致するパターンがない場合、戻りステータスは 0 になります。それ以外の場合、戻りステータスは、一致したパターンのケースの実行された本体の終了ステータスです。
- C がデフォルト ステートメントにデフォルト キーワードを提供するのと同様に、Bash case ステートメントでも、ワイルドカード アスタリスク記号 (*) を使用して、最終パターン ケースを定義してデフォルト ケースを定義できます。
例 1: 各オプションの説明を出力する
この例では、スクリプトを使用してユーザーが部門を選択し、echo コマンドを使用して入力に対応する説明を表示します。このスクリプトでは、DEPARTMENT 変数をコンピューター サイエンスとして割り当てています。これにより、最初のパターンのケースの本体が実行されます。
以下の手順に従ってください。
1. ターミナルを開き (Ctrl + Alt + T)、スクリプトを作成します。
department.sh>
2. 次のステートメントをスクリプトに追加します。
#!/bin/bash DEPARTMENT='Computer Science' echo -n 'Your DEPARTMENT is ' case $DEPARTMENT in 'Computer Science') echo -n 'Computer Science' ;; 'Electrical and Electronics Engineering' | 'Electrical Engineering') echo -n 'Electrical and Electronics Engineering or Electrical Engineering' ;; 'Information Technology' | 'Electronics and Communication') echo -n 'Information Technology or Electronics and Communication' ;; *) echo -n 'Invalid' ;; esac>
3. 各行について以下に説明します。
文字列に長い
- スクリプトの最初の行はシバン (#!) で始まります。
- これは、スクリプトを解析するために特定のインタープリターを使用するようにオペレーティング システムに指示します。
- DEPARTMENT 変数をコンピューター サイエンスとして初期化しました。
- ここでは case ステートメントを使用しています。
- 各式は case ステートメントを通じて処理されます。
- 最後の行 esac は、case ステートメントを終了するために使用されています。
4. スクリプトを保存し、実行可能にします。
chmod +x department.sh>
5. スクリプトを実行します。
./department.sh>
出力:

例 2: 複数のパターンを使用する場合
各節では、複数のパターンのケースを使用できます。式が少なくとも 1 つのパターン ケースと一致する場合、句の本体が実行されます。このスクリプトでは、DEPARTMENT 変数に Electronics and Communication を割り当てています。 3 番目のパターンのケースには、パイプ ( | ) 演算子で区切られた 2 つの値があります。これにより、3 番目のパターンのケースの本体が実行されます。
以下の手順に従ってください。
1. ターミナルを開き (Ctrl + Alt + T)、スクリプトを作成します。
department.sh>
2. 次のステートメントをスクリプトに追加します。
#!/bin/bash DEPARTMENT='Electronics and Communication' echo -n 'Your DEPARTMENT is ' case $DEPARTMENT in 'Computer Science') echo -n 'Computer Science' ;; 'Electrical and Electronics Engineering' | 'Electrical Engineering') echo -n 'Electrical and Electronics Engineering or Electrical Engineering' ;; 'Information Technology' | 'Electronics and Communication') echo -n 'Information Technology or Electronics and Communication' ;; *) echo -n 'Invalid' ;; esac>
3. 各行については以下で説明しています。
- スクリプトの最初の行はシバン (#!) で始まります。
- これは、スクリプトを解析するために特定のインタープリターを使用するようにオペレーティング システムに指示します。
- DEPARTMENT 変数を Electronics and Communication として初期化しました。
- ここでは case ステートメントを使用しています。
- 各式は case ステートメントを通じて処理されます。
- 最後の行 esac は、case ステートメントを終了するために使用されています。
4. スクリプトを保存し、実行可能にします。
Javaのサンプルコード
chmod +x department.sh>
5. スクリプトを実行します。
./department.sh>
出力:
例 3: for ループ
このスクリプトでは、クラスの 3 人の生徒の部門を配列 DEPARTMENT に割り当てています。つまり、DEPARTMENT 変数に記述されている複数の式を処理します。複数の式を反復するには、for ループを使用できます。
以下の手順に従ってください。
1. ターミナルを開き (Ctrl + Alt + T)、スクリプトを作成します。
department.sh>
2. 次のステートメントをスクリプトに追加します。
#!/bin/bash DEPARTMENT=('Electronics and Communication' 'Computer Science' 'Information Technology') for value in '${DEPARTMENT[@]}' do case $value in 'Computer Science') echo -n 'Computer Science ' ;; 'Electrical and Electronics Engineering' | 'Electrical Engineering') echo -n 'Electrical and Electronics Engineering or Electrical Engineering ' ;; 'Information Technology' | 'Electronics and Communication') echo -n 'Information Technology or Electronics and Communication ' ;; *) echo -n 'Invalid ' ;; esac done> 3. 各行について以下に説明します。
- スクリプトの最初の行はシバン (#!) で始まります。
- これは、スクリプトを解析するために特定のインタープリターを使用するようにオペレーティング システムに指示します。
- 配列 DEPARTMENT を 3 つの文字列リテラルで初期化しました。
- ここで、for ループを使用して、要素の配列を反復処理します。
- 各式は case ステートメントを通じて処理されます。
- 最後の行 esac は、case ステートメントを終了するために使用されています。
4. スクリプトを保存し、実行可能にします。
chmod +x department.sh>
5. スクリプトを実行します。
./department.sh>
出力:

例 4: ユーザーに「はい」または「いいえ」を入力するよう求める
以下の手順に従ってください。
ピート・デビッドソン
1. ターミナルを開き (Ctrl + Alt + T)、スクリプトを作成します。
department.sh>
2. 次のステートメントをスクリプトに追加します。
#!/bin/bash echo -n 'Are you a student? [yes or no]: ' read response case $response in 'Y' | 'y' | 'YES' | 'Yes' | 'yes') echo -n 'Yes, I am a student.' ;; 'N' | 'n' | 'No' | 'NO' | 'no' | 'nO') echo -n 'No, I am not a student.'; ;; *) echo -n 'Invalid input' ;; esac>
3. 各行について以下で説明します。
- スクリプトの最初の行はシバン (#!) で始まります。
- これは、スクリプトを解析するために特定のインタープリターを使用するようにオペレーティング システムに指示します。
- ユーザーには「学生ですか?」というメッセージが表示されます。 [はい、もしくは、いいえ]。
- ここで、ユーザーはキーボードを介して応答を返します。
- 応答の出力は、case ステートメントを通じて処理されます。
- 最後の行 esac は、case ステートメントを終了するために使用されています。
4. スクリプトを保存し、実行可能にします。
chmod +x department.sh>
5. 以下のコマンドを使用してスクリプトを実行します。
./department.sh>
出力:

例 5: プロセスにシグナルを送信する
以下の手順に従ってください。
1. ターミナルを開き (Ctrl + Alt + T)、スクリプトを作成します。
signals.sh>
2. 次のステートメントをスクリプトに追加します。
#!/bin/bash if [ $# -lt 2 ] then echo 'Usage :Signalnumber PID' exit fi # Case statement # Signal number (expression) case '' in 1) echo 'Sending SIGHUP signal.....' kill -SIGHUP ;; 2) echo 'Sending SIGINT signal.....' kill -SIGINT ;; 3) echo 'Sending SIGQUIT signal.....' kill -SIGQUIT ;; 4) echo 'Sending SIGKILL signals.....' kill -SIGKILL ;; *) echo 'Signal number has not been processed' ;; esac> ケースステートメント bash スクリプトでは、複数の選択肢に対して決定を下す必要がある場合に使用されます。言い換えれば、式が複数の値を持つ可能性がある場合に便利です。この方法は、スクリプト内の複数の if ステートメントの代替として見ることができます。 Case ステートメントは、コードの可読性が向上し、保守が容易であるため、if ステートメントよりも優れています。 Bash スクリプトの Case ステートメントは、C 言語の Case ステートメントと非常に似ています。ただし、C とは異なり、Bash Case ステートメントは一致が発生するとすぐに検索の続行を停止します。簡単に言えば、パターンの検索をさらに停止するために C で使用することが必須である Break ステートメントは必要ありません。
case ステートメントの基本的な構文を以下に示します。
構文:
case EXPRESSION in Pattern_Case_1) STATEMENTS ;; Pattern_Case_1) STATEMENTS ;; Pattern_Case_N) STATEMENTS ;; *) STATEMENTS ;; esac>case ステートメントがどのように機能するかは次のとおりです。
EXPRESSION>一致を見つけるためにさまざまなパターン (ケース) に対して評価される変数または値です。- case ステートメントはキーワードで始まります
case>続いてEXPRESSION>評価されること。- 各ケースは次のように定義されます。
Pattern_Case>と比較される特定の値またはパターンを表すEXPRESSION>。- それぞれの後に
Pattern_Case>、次の場合に実行されるステートメントがあります。EXPRESSION>特定のものと一致しますPattern_Case>。これらのステートメントは次のように表されます。STATEMENTS>。- の
;;>それぞれの終わりにSTATEMENTS>block は case ブロックの終わりを示します。- の
*)>これは、デフォルト ケースとして知られる特殊なケースです。前のパターンのどれも一致しない場合は、EXPRESSION>、STATEMENTS>下*)>ブロックが実行されます。- の
esac>キーワードは case ステートメントの終わりを示します。
- 一致するパターンがない場合、戻りステータスは 0 になります。それ以外の場合、戻りステータスは、一致したパターンのケースの実行された本体の終了ステータスです。
- C がデフォルト ステートメントにデフォルト キーワードを提供するのと同様に、Bash case ステートメントでも、ワイルドカード アスタリスク記号 (*) を使用して、最終パターン ケースを定義してデフォルト ケースを定義できます。
例 1: 各オプションの説明を出力する
この例では、スクリプトを使用してユーザーが部門を選択し、echo コマンドを使用して入力に対応する説明を表示します。このスクリプトでは、DEPARTMENT 変数をコンピューター サイエンスとして割り当てています。これにより、最初のパターンのケースの本体が実行されます。
以下の手順に従ってください。
1. ターミナルを開き (Ctrl + Alt + T)、スクリプトを作成します。
department.sh>2. 次のステートメントをスクリプトに追加します。
#!/bin/bash DEPARTMENT='Computer Science' echo -n 'Your DEPARTMENT is ' case $DEPARTMENT in 'Computer Science') echo -n 'Computer Science' ;; 'Electrical and Electronics Engineering' | 'Electrical Engineering') echo -n 'Electrical and Electronics Engineering or Electrical Engineering' ;; 'Information Technology' | 'Electronics and Communication') echo -n 'Information Technology or Electronics and Communication' ;; *) echo -n 'Invalid' ;; esac>3. 各行について以下に説明します。
- スクリプトの最初の行はシバン (#!) で始まります。
- これは、スクリプトを解析するために特定のインタープリターを使用するようにオペレーティング システムに指示します。
- DEPARTMENT 変数をコンピューター サイエンスとして初期化しました。
- ここでは case ステートメントを使用しています。
- 各式は case ステートメントを通じて処理されます。
- 最後の行 esac は、case ステートメントを終了するために使用されています。
4. スクリプトを保存し、実行可能にします。
chmod +x department.sh>5. スクリプトを実行します。
./department.sh>出力:
例 2: 複数のパターンを使用する場合
各節では、複数のパターンのケースを使用できます。式が少なくとも 1 つのパターン ケースと一致する場合、句の本体が実行されます。このスクリプトでは、DEPARTMENT 変数に Electronics and Communication を割り当てています。 3 番目のパターンのケースには、パイプ ( | ) 演算子で区切られた 2 つの値があります。これにより、3 番目のパターンのケースの本体が実行されます。
以下の手順に従ってください。
1. ターミナルを開き (Ctrl + Alt + T)、スクリプトを作成します。
department.sh>2. 次のステートメントをスクリプトに追加します。
#!/bin/bash DEPARTMENT='Electronics and Communication' echo -n 'Your DEPARTMENT is ' case $DEPARTMENT in 'Computer Science') echo -n 'Computer Science' ;; 'Electrical and Electronics Engineering' | 'Electrical Engineering') echo -n 'Electrical and Electronics Engineering or Electrical Engineering' ;; 'Information Technology' | 'Electronics and Communication') echo -n 'Information Technology or Electronics and Communication' ;; *) echo -n 'Invalid' ;; esac>3. 各行については以下で説明しています。
- スクリプトの最初の行はシバン (#!) で始まります。
- これは、スクリプトを解析するために特定のインタープリターを使用するようにオペレーティング システムに指示します。
- DEPARTMENT 変数を Electronics and Communication として初期化しました。
- ここでは case ステートメントを使用しています。
- 各式は case ステートメントを通じて処理されます。
- 最後の行 esac は、case ステートメントを終了するために使用されています。
4. スクリプトを保存し、実行可能にします。
chmod +x department.sh>5. スクリプトを実行します。
./department.sh>出力:
例 3: for ループ
このスクリプトでは、クラスの 3 人の生徒の部門を配列 DEPARTMENT に割り当てています。つまり、DEPARTMENT 変数に記述されている複数の式を処理します。複数の式を反復するには、for ループを使用できます。
以下の手順に従ってください。
1. ターミナルを開き (Ctrl + Alt + T)、スクリプトを作成します。
department.sh>2. 次のステートメントをスクリプトに追加します。
#!/bin/bash DEPARTMENT=('Electronics and Communication' 'Computer Science' 'Information Technology') for value in '${DEPARTMENT[@]}' do case $value in 'Computer Science') echo -n 'Computer Science ' ;; 'Electrical and Electronics Engineering' | 'Electrical Engineering') echo -n 'Electrical and Electronics Engineering or Electrical Engineering ' ;; 'Information Technology' | 'Electronics and Communication') echo -n 'Information Technology or Electronics and Communication ' ;; *) echo -n 'Invalid ' ;; esac done>3. 各行について以下に説明します。
- スクリプトの最初の行はシバン (#!) で始まります。
- これは、スクリプトを解析するために特定のインタープリターを使用するようにオペレーティング システムに指示します。
- 配列 DEPARTMENT を 3 つの文字列リテラルで初期化しました。
- ここで、for ループを使用して、要素の配列を反復処理します。
- 各式は case ステートメントを通じて処理されます。
- 最後の行 esac は、case ステートメントを終了するために使用されています。
4. スクリプトを保存し、実行可能にします。
chmod +x department.sh>5. スクリプトを実行します。
./department.sh>出力:
例 4: ユーザーに「はい」または「いいえ」を入力するよう求める
以下の手順に従ってください。
1. ターミナルを開き (Ctrl + Alt + T)、スクリプトを作成します。
department.sh>2. 次のステートメントをスクリプトに追加します。
#!/bin/bash echo -n 'Are you a student? [yes or no]: ' read response case $response in 'Y' | 'y' | 'YES' | 'Yes' | 'yes') echo -n 'Yes, I am a student.' ;; 'N' | 'n' | 'No' | 'NO' | 'no' | 'nO') echo -n 'No, I am not a student.'; ;; *) echo -n 'Invalid input' ;; esac>3. 各行について以下で説明します。
- スクリプトの最初の行はシバン (#!) で始まります。
- これは、スクリプトを解析するために特定のインタープリターを使用するようにオペレーティング システムに指示します。
- ユーザーには「学生ですか?」というメッセージが表示されます。 [はい、もしくは、いいえ]。
- ここで、ユーザーはキーボードを介して応答を返します。
- 応答の出力は、case ステートメントを通じて処理されます。
- 最後の行 esac は、case ステートメントを終了するために使用されています。
4. スクリプトを保存し、実行可能にします。
chmod +x department.sh>5. 以下のコマンドを使用してスクリプトを実行します。
./department.sh>出力:
例 5: プロセスにシグナルを送信する
以下の手順に従ってください。
1. ターミナルを開き (Ctrl + Alt + T)、スクリプトを作成します。
signals.sh>2. 次のステートメントをスクリプトに追加します。
#!/bin/bash if [ $# -lt 2 ] then echo 'Usage : $0 Signalnumber PID' exit fi # Case statement # Signal number (expression) case '$1' in 1) echo 'Sending SIGHUP signal.....' kill -SIGHUP $2 ;; 2) echo 'Sending SIGINT signal.....' kill -SIGINT $2 ;; 3) echo 'Sending SIGQUIT signal.....' kill -SIGQUIT $2 ;; 4) echo 'Sending SIGKILL signals.....' kill -SIGKILL $2 ;; *) echo 'Signal number $1 has not been processed' ;; esac>3. 各行について以下で説明します。
- $1 はシグナル番号、$2 はプロセス ID です。
- 指定されたプロセス ID にシグナルを渡す、または送信するには、kill コマンドを使用します。
- これにより、sleep コマンドが数秒間実行されます。
- オプションの最後の比較の本体 *) は、デフォルトの場合に実行されます。
4. スクリプトを保存します。
5. 以下のコマンドを使用してスクリプトを実行します。
./signals.sh>出力:
$ sleep 10000 $ ps -a | grep sleep 23277 pts/2 00:00:00 sleep $ ./signals.sh 9 31231 Sending SIGKILL signal $ sleep 10000 Killed>
3. 各行について以下で説明します。
- はシグナル番号、 はプロセス ID です。
- 指定されたプロセス ID にシグナルを渡す、または送信するには、kill コマンドを使用します。
- これにより、sleep コマンドが数秒間実行されます。
- オプションの最後の比較の本体 *) は、デフォルトの場合に実行されます。
4. スクリプトを保存します。
おっと
5. 以下のコマンドを使用してスクリプトを実行します。
./signals.sh>
出力:
$ sleep 10000 $ ps -a | grep sleep 23277 pts/2 00:00:00 sleep $ ./signals.sh 9 31231 Sending SIGKILL signal $ sleep 10000 Killed>
例 3: for ループ