GNU/Linux >> Linux の 問題 >  >> Linux

Bashcaseステートメントの構文と例

はじめに

バッシュケース ステートメントは、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

出力には、指定された条件と照合した後に入力された文字のタイプが示されます。


Linux
  1. Bashでプログラミングする方法:構文とツール

  2. BashForループガイドと例

  3. Linux AWKコマンド–LinuxおよびUnixの使用構文の例

  1. 例を含む Bash If-Else ステートメント

  2. Bash の For ループと While ループの例

  3. 4 Awk If ステートメントの例 ( if, if else, if else if, :? )

  1. Bash宣言ステートメント:構文と例

  2. 4 Bash If ステートメントの例 ( If then fi, If then else fi, If elif else fi, Nested if )

  3. 5 Bash Case ステートメントの例