はじめに
バッシュケース
ステートメントは、ifelifelse条件ステートメントの最も単純な形式です。 ケース
ステートメントは、複数の異なる選択肢を持つ複雑な条件を単純化します。このステートメントは、ネストされた if
よりも保守が簡単で、読みやすくなっています。 ステートメント。
ケース
ステートメントは、対応するパターンが見つかるまで入力値をテストし、その入力値にリンクされたコマンドを実行します。したがって、ユーザーが対応するアクションをトリガーするオプションを選択するメニューを作成するのに最適です。
このチュートリアルでは、bashの case
について学習します。 ステートメント基本 シェルスクリプトでの使用方法。
前提条件
- Linuxを実行しているマシン。
- コマンドラインへのアクセス。
- vi/vimなどのテキストエディタ。
Bashcaseステートメントの構文
バッシュケース
ステートメントは次の構文を取ります:
case $variable in
pattern-1)
commands;;
pattern-2)
commands;;
pattern-3)
commands;;
pattern-N)
commands;;
*)
commands;;
esac
ケース
ステートメントはcase
で始まります キーワードの後に$ variable
が続きます およびin
キーワード。ステートメントはcase
で終わります キーワードを逆方向に-esac
。
$ variable
- スクリプトは入力
$ variable
を比較します 一致するものが見つかるまで、各句のパターンに対して。
パターン
- パターンとそのコマンドは句を作成します 、
;;
で終わります 。 - パターンは特殊文字をサポートします。
-
)
オペレーターはパターンリストを終了します。 -
|
演算子は複数のパターンを区切ります。 - スクリプトは、入力
$ variable
に一致する最初のパターンに対応するコマンドを実行します 。 - アスタリスク
*
シンボルは、通常は最終パターンでデフォルトのケースを定義します。
終了ステータス
スクリプトには2つの終了ステータスがあります:
- 0 。入力がパターンに一致しない場合の戻りステータス。
- 実行されたコマンドのステータス 。コマンドが入力変数をパターンに一致させると、実行されたコマンドの終了ステータスが返されます。
Bashのcaseステートメントの例
このセクションでは、bash case
の実際の使用例を示します。 ステートメント。
例1:各オプションの説明を出力する
次の例は、ユーザーが色を選択し、echoコマンドを使用して入力に対応するコメントを表示できるようにするスクリプトです。
以下の手順に従ってください:
1.ターミナルを開きます( Ctrl + Alt + T )そしてスクリプトを作成します:
vi color.sh
2.スクリプトに次の行を追加します。
#!/bin/bash
echo "Which color do you like best?"
echo "1 - Blue"
echo "2 - Red"
echo "3 - Yellow"
echo "4 - Green"
echo "5 - Orange"
read color;
case $color in
1) echo "Blue is a primary color.";;
2) echo "Red is a primary color.";;
3) echo "Yellow is a primary color.";;
4) echo "Green is a secondary color.";;
5) echo "Orange is a secondary color.";;
*) echo "This color is not available. Please choose a different one.";;
esac
各行には次の役割があります:
- 各スクリプトの最初の行は通常、シバン(
#!
)です。 )、ファイルの解析に使用するインタプリタをオペレーティングシステムに指示します。 - 2〜7行目は、ユーザーが選択できるオプションメニューです。
読み取り色;
変数はユーザーに回答を求め、それを保存します。ケース
ステートメントには、ユーザーの入力に対応する可能な応答が含まれています。この例では、出力はecho
です コマンド出力。- 最後の行、
esac
、ケース
を終了します ステートメント。
3.スクリプトを保存し、次のコマンドでviを終了します。
:wq
4.各スクリプトを実行する前に、必ずchmodを実行して実行可能にしてください。
chmod +x color.sh
5.スクリプトを実行します:
./color.sh
スクリプトはオプションメニューを提供し、選択したオプションに応じて異なるメッセージを出力します。
例2:複数のパターンを使用する
ケース
ステートメントでは、各句で複数のパターンを使用できます。式が指定されたパターンに一致する場合、スクリプトはその句のコマンドを実行します。
このサンプルスクリプトは、ユーザーに月の入力を求め、日数を出力します。考えられる答えは3つあります:
- 30日。
- 31日。
- 2月は28日または29日。
以下の手順に従って、スクリプトを作成します。
1.スクリプトmonth.shを作成します 実行することにより:
vi month.sh
2.次の行を入力して、スクリプトを保存します。
#!/bin/bash
shopt -s nocasematch
echo "Enter the name of a month."
read month
case $month in
February)
echo "There are 28/29 days in $month.";;
April | June | September | November)
echo "There are 30 days in $month.";;
January | March | May | July | August | October | December)
echo "There are 31 days in $month.";;
*)
echo "Unknown month. Please check if you entered the correct month name: $month";;
esac
上記の例では:
-
shopt
-s nocasematch
を使用したコマンド オプションを使用すると、パターンマッチングで大文字と小文字が区別されない場合にエラーが発生する可能性が低くなります。 - パイプシンボル
|
各句のパターンを区切ります。
3.スクリプトを実行可能にします:
chmod +x month.sh
4.スクリプトを実行します:
./month.sh
スクリプトは大文字と小文字の違いを無視し、選択した月の正しい日数を出力します。
例3:forループ
for
を使用する ケース
でループする 処理する式が多い場合のステートメント。次のスクリプトは、ディレクトリからすべてのタイプのファイルを返します。
以下の手順に従ってください:
1.シェルスクリプトを作成します:
vi filelist.sh
2.次の行を入力して、スクリプトを保存します。
#!/bin/bash
for file in $(ls)
do
Extension=${file##*.}
case "$Extension" in
sh) echo "Shell script: $file";;
md) echo "A markdown file: $file";;
png) echo "PNG image file: $file";;
txt) echo "A text file: $file";;
zip) echo "An archive: $file";;
conf) echo "A configuration file: $file";;
py) echo "A Python script: $file";;
*) echo "Unknown file type: $file";;
esac
done
上記の例では:
- ls コマンドは、ディレクトリからファイルリストをプルします。
-
for
loopは、ファイルグロブを適用して、各ファイルの拡張子を抽出します。
3.スクリプトを実行可能にします:
chmod +x filelist.sh
4.スクリプトを実行します:
./filelist.sh
スクリプトは、現在のディレクトリに存在する各ファイルタイプを識別します。
例4:名簿を作成する
ケース
を使用する 単純なデータベースを作成し、要求された情報を迅速に生成するステートメント。次の例では、名前、電子メールアドレス、および選択した人のアドレスを出力します。
1.スクリプトを作成します:
vi phonebook.sh
2.次の行を追加して、スクリプトを保存します。
#!/bin/bash
echo "Choose a contact to display information:"
echo "[C]hris Ramsey"
echo "[J]ames Gardner"
echo "[S]arah Snyder"
echo "[R]ose Armstrong"
read person
case "$person" in
"C" | "c" ) echo "Chris Ramsey"
echo "[email protected]"
echo "27 Railroad Dr. Bayside, NY";;
"J" | "j" ) echo "James Gardner"
echo "[email protected]"
echo "31 Green Street, Green Cove Springs, FL";;
"S" | "s") echo "Sarah Snyder"
echo "[email protected]"
echo "8059 N. Hartford Court, Syosset, NY";;
"R" | "r") echo "Rose Armstrong"
echo "[email protected]"
echo "49 Woodside St., Oak Forest, IL";;
*) echo "Contact doesn't exist.";;
esac
3.スクリプトをchmodします:
chmod +x phonebook.sh
3.スクリプトを実行します:
./phonebook.sh
スクリプトは、選択した人の連絡先の詳細を出力します。リストされていないオプションを選択すると、連絡先が存在しないことがユーザーに通知されます。
例5:文字タイプを確認する
次の例は、ケース
の使用方法を示しています ユーザーが入力した文字タイプを確認するステートメント。
以下の手順に従ってください:
1.スクリプトを作成します:
vi character.sh
2.次の行を追加して、スクリプトを保存します。
#!/bin/bash
echo "Enter a character:"
read var
case $var in
[[:lower:]) echo "You entered a lowercase character.";;
[[:upper:]]) echo "You entered an uppercase character.";;
[0-9]) echo "You entered a digit.";;
?) echo "You entered a special character.";;
*) echo "You entered multiple characters.";;
esac
上記の例では:
-
$ var
制御変数は入力を格納します。 - 一致する可能性のあるすべての組み合わせを入力する代わりに、角かっこを使用します
[]
文字範囲を示します。二重角かっこを使用する[[]]
POSIX範囲の場合。if-else
各文字の条件を個別に入力する必要があります。 -
?コード>
文字は、小文字、大文字、または数字以外の文字をカバーします。*
ではなく、1文字のみを置き換えます これは、上記の条件でカバーされていない他のすべてを置き換えます。
3.権限を変更して、スクリプトを実行可能にします。
chmod +x character.sh
4.スクリプトを実行します:
./character.sh
出力には、指定された条件と照合した後に入力された文字のタイプが示されます。