このチュートリアルでは、Bashifステートメントの基本について説明し、シェルスクリプトでの使用方法を示します。
意思決定は、コンピュータプログラミングの最も基本的な概念の一つです。 他のプログラミング言語と同様に、Bashのif、if..else、if..elif..elseおよびネストされたifステートメントを使用して、特定の条件に基づいてコードを実行できます。,
ifステートメント#
Bashif条件は異なる形式を持つことができます。 最も基本的なifステートメントは次の形式をとります。
if TEST-COMMANDthen STATEMENTSfi
ifステートメントは、ifキーワードで始まり、その後に条件式とthenキーワードが続きます。 このステートメントは、fiキーワードで終了します。,
TEST-COMMANDがTrueと評価された場合、STATEMENTSが実行されます。 もしTEST-COMMAND返すFalse、何も起こらない、STATEMENTS無視されます。
一般的には、常にコードをインデントし、コードブロックを空白行で区切ることをお勧めします。 ほとんどの人はお選びいずれかを使用4-スペースまたは2つの空間インデント. インデントや空白行は、コードをより読みやすく整理します。,
指定された数値が10より大きいかどうかをチェックする次のスクリプト例を見てみましょう。
#!/bin/bashecho -n "Enter a number: "read VARif ]then echo "The variable is greater than 10."fi
コードをファイルに保存し、コマンドラインから実行します。
bash test.sh
スクリプトは数値を入力するように求められます。 たとえば、15と入力すると、15が10より大きいため、testコマンドはtrueと評価され、echothen句内のechoコマンドが実行されます。
The variable is greater than 10.
もし。.,elseステートメント#
Bashif..elseステートメントは次の形式をとります。
if TEST-COMMANDthen STATEMENTS1else STATEMENTS2fi
TEST-COMMANDがTrueと評価される場合、STATEMENTS1が実行されます。 それ以外の場合、TEST-COMMANDがFalseを返す場合、STATEMENTS2が実行されます。 ステートメント内にはelse句しか持つことができません。,
前の例のスクリプトにelse句を追加しましょう。
コードを実行して数値を入力すると、スクリプトは数値が10以上であるか以下であるかに基づいて異なるメッセージを出力します。
もし。.エリフ.elseステートメント#
Bashif..elif..elseステートメントは次の形式をとります。
if TEST-COMMAND1then STATEMENTS1elif TEST-COMMAND2then STATEMENTS2else STATEMENTS3fi
TEST-COMMAND1がTrueと評価される場合、STATEMENTS1が実行されます。, TEST-COMMAND2がTrueと評価された場合、STATEMENTS2が実行されます。 いずれのテストコマンドもTrueと評価されない場合、STATEMENTS2が実行されます。
ステートメントには、elif句を含めることができます。 else句はオプションです。
条件は順次評価されます。, 条件がTrueを返すと、残りの条件は実行されず、プログラム制御はifステートメントの最後に移動します。
前のスクリプトにelif句を追加しましょう。
ネストされたif文#
Bashでは、ifステートメントをifステートメント内にネストすることができます。 複数のifステートメントを別のifステートメント内に配置できます。,
次のスクリプトは、三つの数字を入力するように求められ、三つの数字の中で最大の数字を印刷します。
出力がどのように見えるかは次のとおりです。
Enter the first number: 4Enter the second number: 7Enter the third number: 27 is the largest number.
caseステートメントの代わりにifステートメントを使用する方が効率的です。複数の条件#
論理ORおよびAND演算子を使用すると、ifステートメントで複数の条件を使用できます。,
ここでは、三つの数字の中で最大の数を印刷するスクリプトの別のバージョンです。 このバージョンでは、ネストされたifステートメントの代わりに、論理AND(&&)演算子を使用しています。
Test Operators#
Bashでは、testコマンドは次の構文形式のいずれかをとります。
test EXPRESSION]
スクリプトを移植可能にするには、古いtest[コマンドを使用することをお勧めします。, 新しくアップグレードされたバージョンのtestコマンド[[(二重括弧)は、Bash、Zsh、およびkshをデフォルトのシェルとして使テスト式を否定するには、論理演算子NOT(!)を使用します。 文字列を比較す,
最も一般的に使用される演算子のいくつかは次のとおりです。
-nVAR–VARの長さがゼロより大きい場合-zVAR–VARが空の場合にTrueになります。STRING1 = STRING2–STRING1とSTRING2が等しい場合にTrue。STRING1 != STRING2–STRING1とSTRING2が等しくない場合にTrue。,-
INTEGER1 -eq INTEGER2– True ifINTEGER1andINTEGER2are equal. -
INTEGER1 -gt INTEGER2– True ifINTEGER1is greater thanINTEGER2. -
INTEGER1 -lt INTEGER2– True ifINTEGER1is less thanINTEGER2. -
INTEGER1 -ge INTEGER2– True ifINTEGER1is equal or greater than INTEGER2. -
INTEGER1 -le INTEGER2– True ifINTEGER1is equal or less thanINTEGER2., -
-hFILE– True if theFILEexists and is a symbolic link. -
-rFILE– True if theFILEexists and is readable. -
-wFILE– True if theFILEexists and is writable. -
-xFILE– True if theFILEexists and is executable., -dFILE–FILEが存在し、ディレクトリである場合にTrue。-eFILE–FILEが存在し、タイプ(ノード、ディレクトリ、ソケットなど)に関係なく、ファイルである場合にTrue。).-fFILE–FILEが存在し、通常のファイル(ディレクトリまたはデバイスではない)である場合にTrue。,
結論#
if、if..elseおよびif..elif..elseステートメントを使用すると、指定された条件を評価することによって、Bashスクリプトの実行