Bash で条件付きロジックをマスターする方法

Bash De Tiao Jian Fukirojikkuwomasutasuru Fang Fa



条件付きロジックの使用は、プログラミング言語にとって非常に重要な部分です。条件付きロジックは、プログラミングの問題を解決するために、さまざまな方法で Bash に実装できます。このチュートリアルでは、さまざまな種類の「if」および「case」ステートメントを使用して、文字列と数値の比較、変数の内容の確認、ファイルまたはディレクトリの存在の確認などを行うために、Bash で条件付きロジックを使用する方法を示します。 。

コンテンツのリスト:

  1. 「If」ステートメントの使用
  2. 「If-Else」ステートメントの使用
  3. 「If-Elif-Else」ステートメントの使用
  4. 「If」ステートメントを使用して空の変数を確認する
  5. 論理演算子を使用した「If」ステートメントの使用
  6. ネストされた「If」ステートメントの使用
  7. ファイルの存在を確認するための「If」ステートメントの使用
  8. 「If」ステートメントを使用してディレクトリの存在を確認する
  9. 正規表現での「If」ステートメントの使用
  10. 「Case」ステートメントの使用

「If」ステートメントの使用

この例は、Bash での「if」ステートメントの簡単な使用法を示しています。 Bash では、6 種類の比較演算子を使用して数値を比較できます。これらは、「-eq」(等しい)、「-ne」(等しくない)、「-le」(等しいより小さい)、「-ge」(等しい)、「-lt」(より小さい)、および「」です。 -gt」(より大きい)。数値が 99 未満であるか、または「-lt」演算子を使用してチェックされていない場合の「-lt」および「-eq」の使用法を次のスクリプトに示します。数値は偶数または奇数であり、「-eq」演算子によってチェックされます。







#!/bin/bash

#数値を代入する

( ( 番号 = 50

#if文で数値を確認する

もし [ $number -lt 99

それから

エコー 「番号は有効です。」

なれ

#数値が偶数かどうかを確認する

もし [ $ ( ( $number % 2 -eq 0

それから

エコー 「数字は偶数です。」

なれ

出力 :



前のスクリプトを実行すると、次の出力が表示されます。



  p1





トップへ戻る

「If-Else」ステートメントの使用

「if-else」ステートメントの使用方法を次のスクリプトに示します。文字列値がユーザーから取得され、「if-else」ステートメントを使用して値が「BLUE」かどうかを確認します。



#!/bin/bash

#ユーザーから文字列値を取得します

読む -p 「好きな色を入力してください:」

#「if-else」ステートメントを使用して文字列値を確認する

もし [ ${色^^} == '青'

それから

エコー 「はい、青色がございます。」

それ以外

エコー $color 利用できません。'

なれ

出力 :

「red」が入力として受け取られた場合、前のスクリプトの実行後に次の出力が表示されます。

  p2-1

「blue」が入力として受け取られた場合、前のスクリプトを実行すると、次の出力が表示されます。

  p2-2

トップへ戻る

「If-Elif-Else」ステートメントの使用

「if-elif-else」ステートメントの使用方法を次のスクリプトに示します。ユーザーから数値が取得され、一致するものが見つかるまでさまざまな値がチェックされます。一致するものが見つかった場合は、対応するメッセージが出力されます。一致するものが見つからない場合は、デフォルトのメッセージが出力されます。

#!/bin/bash

#ユーザーからID値を取得します

読む -p 「シリアル番号を入力してください:」 シリアル

#「if-elif-else」ステートメントを使用して入力値を確認する

もし [ $シリアル == 「4523」

それから

エコー 「あなたはグループAに選ばれました。」

エリフ [ $シリアル == 「8723」

それから

エコー 「あなたはBグループに選ばれました。」

エリフ [ $シリアル == 「3412」

それから

エコー 「あなたはグループCに選ばれました。」

それ以外

エコー 「あなたは選ばれていません」

なれ

出力:

値 8723 を指定してスクリプトを実行すると、次の出力が表示されます。

  p3-1

値 9078 を指定してスクリプトを実行すると、次の出力が表示されます。

  p3-2

トップへ戻る

「If」ステートメントを使用して空の変数を確認する

if 文を使用せずに変数が空かどうかを確認する方法を次のスクリプトに示します。このタスクを実行するには、「if」ステートメントで「-z」オプションを使用します。

#!/bin/bash

#ユーザーからID値を取得します

読む -p 「シリアル番号を入力してください:」 シリアル

#変数が空かどうかを確認する

もし [ -と $シリアル

それから

#「if-elif-else」ステートメントを使用して入力値を確認する

もし [ $シリアル == 「690」

それから

エコー 「あなたはチーム1に選ばれました。」

エリフ [ $シリアル == 「450」

それから

エコー 「あなたはチーム2に選ばれました。」

それ以外

エコー 「あなたは選ばれていません」

なれ

それ以外

エコー 「シリアル番号は記載されていません。」

なれ

出力 :

値 690 を指定してスクリプトを実行すると、次の出力が表示されます。

  p4-1

入力値が取得されない場合、スクリプトの実行後に次の出力が表示されます。

  p4-2

トップへ戻る

論理演算子を使用した「If」ステートメントの使用

Bash の条件文では 3 種類の論理演算子を使用できます。これらは、論理 OR (||)、論理 AND (&&)、および論理 NOT (!) です。コード値はユーザーから取得されます。入力値が空でない場合、値は論理 OR を使用して 2 つのコード値でチェックされます。値がいずれかのコードと一致する場合、対応するメッセージが出力されます。一致するコードが見つからない場合は、デフォルトのメッセージが出力されます。

#!/bin/bash

#ユーザーからコースコードを取得します

読む -p 「コースコードを入力してください:」 コード

#変数が空かどうかを確認する

もし [ -と $コード

それから

#「if-elif-else」ステートメントを使用して入力値を確認する

もし [ [ $コード == 「CSE-106」 || $コード == 「CSE-108」

それから

エコー 「CSEコース」

エリフ [ [ $コード == 「BBA-203」 || $コード == 「BBA-202」

それから

エコー 「BBAコース」

それ以外

エコー 「コースコードが無効です。」

なれ

それ以外

エコー 「コースコードは指定されていません。」

なれ

出力 :

入力値「CSE-108」を使用してスクリプトを実行すると、次の出力が表示されます。

  p5-1

入力値「BBA-56」を使用してスクリプトを実行すると、次の出力が表示されます。

  p5-2

トップへ戻る

ネストされた「If」ステートメントの使用

「if」条件が別の「if」条件内で使用される場合、それはネストされた「if」ステートメントと呼ばれます。ネストされた「if」を使用する方法を次のスクリプトに示します。 2 つのマーク値がユーザーから取得されます。入力値が空でない場合、最初の「if」条件は「$セオリー」の値が 60 以上であるかどうかをチェックします。最初の「if」条件が「true」を返した場合、2 番目の「if」条件は「$lab」の値が 50 以上であるかどうかをチェックします。 2 番目の「if」条件も「true」を返した場合、成功メッセージが出力されます。それ以外の場合は、失敗メッセージが出力されます。

#!/bin/bash

#理論マークを取る

読む -p 「理論記号を入力してください:」 理論

#ラボマークを取る

読む -p 「ラボマークを入力してください:」 研究室

#変数が空かどうかを確認する

もし [ [ -と $セオリー && -と $lab

それから

#ネストされた「if」ステートメントを使用して入力値をチェックする

もし [ $セオリー -ge 60

それから

もし [ $lab -ge 50

それから

エコー 「あなたは合格しました。」

それ以外

エコー 「あなたは失敗しました。」

なれ

それ以外

エコー 「あなたは失敗しました。」

なれ

それ以外

エコー 「理論または実験室のマークは空です。」

なれ

出力 :

入力値の両方または 1 つが空の場合、次の出力が表示されます。

  p6-1

78 が理論マークとして取られ、45 が実験マークとして取られる場合、次の出力が表示されます。ここで、2 番目の「if」条件は「false」を返します。

  p6-2

67 が理論マークとして取られ、56 が実験マークとして取られる場合、次の出力が表示されます。ここでは、両方の「if」条件が「true」を返します。

  p6-3

50 を理論点、80 を実験点とすると、次の出力が表示されます。ここで、最初の「if」条件は「false」を返します。

  p6-4

トップへ戻る

ファイルの存在を確認するための「If」ステートメントの使用

ファイルの存在は、bash スクリプトによって 2 つの方法で確認できます。 1 つは、「[]」括弧で「-f」演算子を使用する方法です。もう 1 つは、「test」コマンドと「-f」演算子を使用する方法です。ファイル名が取得され、「-f」演算子を伴う「if」条件を使用してファイルの存在がチェックされます。次に、別のファイル名を取得し、「if」ステートメントと「test」コマンドおよび「-f」演算子を使用してファイルの存在を確認します。

#!/bin/bash

#ファイル名を取得します

読む -p 「ファイル名を入力してください:」 fn1

#testを使わずにファイルが存在するかどうかを確認する

もし [ -f $fn1

それから

エコー $fn1 ファイルが存在しています。'

それ以外

エコー $fn1 ファイルが存在しません。'

なれ

#改行を追加

エコー

#別のファイル名を取得します

読む -p 「別のファイル名を入力してください:」 fn2

#`test`を使用してファイルが存在するかどうかを確認します

もし テスト -f $fn2 ; それから

エコー $fn2 ファイルが存在しています。'

#`test`を使用してファイルが空かどうかを確認します

もし テスト -と $fn2 ; それから

エコー $fn2 ファイルが空です。」

それ以外

エコー $fn2 ファイルが空ではありません。」

なれ

それ以外

エコー $fn2 ファイルが存在しません。'

なれ

出力 :

ファイル名として「test.txt」と「testing.txt」を使用してスクリプトを実行すると、次の出力が表示されます。出力によると、両方のファイルが現在の場所に存在し、「testing.txt」ファイルは空です。

  p7-1

ファイル名として「f1.txt」と「test.txt」を使用してスクリプトを実行すると、次の出力が表示されます。出力によると、「f1.txt」ファイルは現在の場所に存在せず、「test.txt」ファイルは空ではありません。

  p7-2

トップへ戻る

「If」ステートメントを使用してディレクトリの存在を確認する

ディレクトリの存在は、ファイルと同様に Bash スクリプトによって 2 つの方法で確認できます。 1 つは、「[]」括弧で「-d」演算子を使用する方法です。もう 1 つは、「test」コマンドと「-d」演算子を使用する方法です。ディレクトリ名が取得され、「-d」演算子を伴う「if」条件を使用してディレクトリの存在がチェックされます。次に、別のディレクトリ名が取得され、「if」ステートメントと「test」コマンドおよび「-d」演算子を使用してファイルの存在がチェックされます。

#!/bin/bash

#ディレクトリ名を取得します

読む -p 「ディレクトリ名を入力してください:」 あなた1

#testを使わずにディレクトリが存在するかどうかを確認する

もし [ -d $dir1

それから

エコー $dir1 ディレクトリが存在します。」

それ以外

エコー $dir1 ディレクトリが存在しません。」

なれ

#改行を追加

エコー

#別のディレクトリ名を取得します

読む -p 「別のディレクトリ名を入力してください:」 ディレクトリ2

#`test`を使用してファイルが存在するかどうかを確認します

もし テスト -d $dir2

それから

エコー $dir2 ディレクトリが存在します。」

それ以外

エコー $dir2 ディレクトリが存在しません。」

なれ

出力 :

「temp」および「files」ディレクトリ名を使用してスクリプトを実行すると、次の出力が表示されます。出力によると、両方のディレクトリが現在の場所に存在します。次に、「ls」コマンドを実行してディレクトリの内容を確認します。

  p8-1

「testing」および「new」ディレクトリ名を使用してスクリプトを実行すると、次の出力が表示されます。出力によると、両方のディレクトリが現在の場所に存在しません。次に、「ls」コマンドの出力には、両方のディレクトリが存在しないことが示されます。

  p8-2

トップへ戻る

正規表現での「If」ステートメントの使用

次のスクリプトは、正規表現を含む「if」ステートメントを使用して入力データを検証する方法を示しています。ここでは、2 つの入力値がユーザーから取得され、「$bookname」変数と「$bookprice」変数に保存されます。スクリプト内で「if」条件を使用して、「$bookname」変数にすべての英字が含まれ、「$bookprice」に数字が含まれていることを確認します。

#!/bin/bash

#ユーザーから本の名前と価格を取得します

エコー -n 「本の名前を入力してください:」

読む 本名

エコー -n 「本の価格を入力してください:」

読む 本の価格

#書籍名にアルファベットのみが含まれていることを確認してください

もし [ [ $本名 =~ [ ザ・ザ・ズ ; それから

エコー 「書籍名が無効です。」

それ以外

エコー 「書籍名は有効です。」

なれ

#書籍の価格に数字のみが含まれていることを確認してください

もし [ [ $本の価格 =~ [ 0 - 9 ; それから

エコー 「本の価格には数字のみを含めることができます。」

それ以外

エコー 「本の価格は有効です。」

なれ

出力 :

次の出力は、書籍名として「Bash Programming」、書籍の価格として 78 の入力値を使用してスクリプトを実行すると表示されます。

  p9-1

次の出力は、書籍名として 90、書籍価格として「Bash」という入力値を使用してスクリプトを実行すると表示されます。

  p9-2

トップへ戻る

「Case」ステートメントの使用

「case」ステートメントは「if-elif-else」ステートメントの代替ですが、「if-elif-else」ステートメントのすべてのタスクを「case」ステートメントを使用して実行することはできません。 「case」ステートメントの簡単な使用法を次のスクリプトに示します。現在の月の値として数値がユーザーから取得されます。次に、「case」ステートメント内に一致する値が見つかった場合は、対応する月が出力されます。それ以外の場合は、デフォルトのメッセージが出力されます。

#!/bin/bash

#現在の月の値を数値で取得します

読む -p 「今日の月を数字で入力してください:」 b_月

#月名を印刷する前にテキストを印刷します

エコー -n 「現在の月の名前は」

#入力に基づいて一致する月名を見つけて出力します

場合 $b_month

1 | 01 ) エコー '1月。' ;;

2 | 02 ) エコー '2月。' ;;

3 | 03 ) エコー '行進。' ;;

4 | 04 ) エコー 「4月。」 ;;

5 | 05 ) エコー '5月。' ;;

6 | 06 ) エコー '六月。' ;;

7 | 07 ) エコー 「7月」 ;;

8 | 08 ) エコー 「8月」 ;;

9 | 09 ) エコー 「9月」 ;;

10 ) エコー '10月。' ;;

十一 ) エコー 「11月」 ;;

12 ) エコー '12月。' ;;

* ) エコー '見つかりません。' ;;

イーサック

出力 :

値 6 を指定してスクリプトを実行すると、次の出力が表示されます。

  p10-1

値 09 を指定してスクリプトを実行すると、次の出力が表示されます。


  p10-2

値 14 を指定してスクリプトを実行すると、次の出力が表示されます。

  p10-3

トップへ戻る

結論

このチュートリアルの 10 個の例では、「if」ステートメントと「case」ステートメントを使用した条件付きロジックのさまざまな使用法が示されています。このチュートリアルを読むと、新しい Bash ユーザーにとって、Bash で条件付きロジックを使用するという概念が明確になります。