アンドロイド

Bash if..elseステートメント

If Statements in Shell Scripts | Linux Terminal 201 - HakTip 182

If Statements in Shell Scripts | Linux Terminal 201 - HakTip 182

目次:

Anonim

意思決定は、コンピュータープログラミングの最も基本的な概念の1つです。 他のプログラミング言語と同様に、 if if..else if..elif..else 、およびBashのネストされた if ステートメントを使用して、特定の条件に基づいてコードを実行できます。

このチュートリアルでは、Bashの if ステートメントの基本を説明し、シェルスクリプトでそれらを使用する方法を示します。

if ステートメント

条件が異なる形式を持つことができる if bash。 最も基本的な if ステートメントの形式は次のとおりです。

if TEST-COMMAND then STATEMENTS fi

if ステートメントは if キーワードで始まり、 then 条件式と then キーワードが続きます。 ステートメントは fi キーワードで終了します。

TEST-COMMAND True と評価されると、 STATEMENTS が実行されます。 TEST-COMMAND False 返す場合、何も起こりません STATEMENTS は無視されます。

一般的に、常にコードをインデントし、コードブロックを空白行で区切ることをお勧めします。 ほとんどの人は、4スペースまたは2スペースのインデントを使用することを選択します。 インデントと空白行により、コードが読みやすく整理されます。

指定された数値が10より大きいかどうかを確認する次のスクリプト例を見てみましょう。

#!/bin/bash echo -n "Enter a number: " read VAR if] then echo "The variable is greater than 10." fi

コードをファイルに保存し、コマンドラインから実行します。

bash test.sh

スクリプトは、数字の入力を求めます。 たとえば、15を入力すると、15が10より大きいため、 test コマンドは true と評価され、 then 句内の echo コマンドが実行されます。

The variable is greater than 10.

if..else ステートメント

Bashの if..else ステートメントは次の形式を取ります。

if TEST-COMMAND then STATEMENTS1 else STATEMENTS2 fi

TEST-COMMAND True と評価された場合、 STATEMENTS1 が実行されます。 それ以外の場合、 TEST-COMMAND False 返すと、 STATEMENTS2 が実行されます。 ステートメントには else 句を1つだけ else ことができます。

前のスクリプト例に else 節を追加しましょう。

#!/bin/bash echo -n "Enter a number: " read VAR if] then echo "The variable is greater than 10." else echo "The variable is equal or less than 10." fi

if..elif..else ステートメント

Bashの if..elif..else ステートメントの形式は次のとおりです。

if TEST-COMMAND1 then STATEMENTS1 elif TEST-COMMAND2 then STATEMENTS2 else STATEMENTS3 fi

TEST-COMMAND1 True と評価された場合、 STATEMENTS1 が実行されます。 TEST-COMMAND2 True と評価された場合、 STATEMENTS2 が実行されます。 STATEMENTS2 テストコマンドも True と評価されない場合、 STATEMENTS2 が実行されます。

ステートメントには1つ以上の elif 句を elif ことができます。 else 節はオプションです。

条件は順番に評価されます。 条件が True 返すと、残りの条件は実行されず、プログラム制御は if ステートメントの最後に移動します。

前のスクリプトに elif 句を追加しましょう。

#!/bin/bash echo -n "Enter a number: " read VAR if] then echo "The variable is greater than 10." elif] then echo "The variable is equal to 10." else echo "The variable is less than 10." fi

if ステートメントのネスト

Bashでは if ステートメント内に if ステートメントをネストできます。 複数の if ステートメントを別の if ステートメント内に配置できます。

次のスクリプトは、3つの数字の入力を求め、3つの数字の中で最大の数字を出力します。

#!/bin/bash echo -n "Enter the first number: " read VAR1 echo -n "Enter the second number: " read VAR2 echo -n "Enter the third number: " read VAR3 if] then if] then echo "$VAR1 is the largest number." else echo "$VAR3 is the largest number." fi else if] then echo "$VAR2 is the largest number." else echo "$VAR3 is the largest number." fi fi

出力は次のようになります。

Enter the first number: 4 Enter the second number: 7 Enter the third number: 2 7 is the largest number. ネストされた if ステートメントを使用する代わりに、通常はcaseステートメントを使用する方が効率的です。

複数の条件

論理 OR および AND 演算子を使用すると、 if ステートメントで複数の条件を使用できます。

以下に、3つの数字の中で最大の数字を出力するスクリプトの別のバージョンを示します。 このバージョンでは、ネストされた if ステートメントの代わりに、論理 AND && )演算子を使用します。

#!/bin/bash echo -n "Enter the first number: " read VAR1 echo -n "Enter the second number: " read VAR2 echo -n "Enter the third number: " read VAR3 if] &&] then echo "$VAR1 is the largest number." elif] &&] then echo "$VAR2 is the largest number." else echo "$VAR3 is the largest number." fi

テストオペレーター

Bashでは、 test コマンドは次の構文形式のいずれかを取ります。

test EXPRESSION]

テスト式を無効にするには、論理 NOT ! )演算子を使用します。 文字列を比較するときは、単語の分割やグロビングの問題を避けるために、常に一重引用符または二重引用符を使用してください。

以下は、最も一般的に使用される演算子の一部です。

  • -n VAR -n VAR の長さがゼロより大きい場合は真。 -z VAR -VARが空の場合はTrue。 STRING1 = STRING2 -True [STRING1とSTRING2は等しい。 STRING1 != STRING2 真のSTRING1とSTRING2は等しくありません。 INTEGER1 -eq INTEGER2 真のINTEGER1とINTEGER2は等しい。 INTEGER1 -gt INTEGER2 真のINTEGER1はINTEGER2より大きい。 INTEGER1 -lt INTEGER2 -INTEGER1はINTEGER2よりも小さい。 INTEGER1 -ge INTEGER2 真のINTEGER1はINTEGER2以上です。 INTEGER1 -le INTEGER2 真のINTEGER1はINTEGER2以下です。 -h FILE -FILEが存在し、シンボリックリンクである場合はtrue。 -r FILE -FILEが存在し、読み取り可能な場合はtrue。 -w FILE -FILEが存在し、書き込み可能な場合はtrue。 -x FILE -FILEが存在し、実行可能であれば真。 -d FILE -FILEが存在し、ディレクトリである場合はtrue。 -e FILE -FILEが存在し、タイプ(ノード、ディレクトリ、ソケットなど)に関係なくファイルである場合はtrue。 -f FILE -FILEが存在し、通常のファイル(ディレクトリまたはデバイスではない)である場合はtrue。

結論

if if..else および if..elif..else ステートメントを使用すると、特定の条件を評価することにより、Bashスクリプトの実行のフローを制御できます。

バッシュターミナル