このチュートリアルでは、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
と評価され、echo
then
句内の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
(!
)を使用します。 文字列を比較す,
最も一般的に使用される演算子のいくつかは次のとおりです。
-n
VAR
–VAR
の長さがゼロより大きい場合-z
VAR
–VAR
が空の場合にTrueになります。STRING1 = STRING2
–STRING1
とSTRING2
が等しい場合にTrue。STRING1 != STRING2
–STRING1
とSTRING2
が等しくない場合にTrue。,-
INTEGER1 -eq INTEGER2
– True ifINTEGER1
andINTEGER2
are equal. -
INTEGER1 -gt INTEGER2
– True ifINTEGER1
is greater thanINTEGER2
. -
INTEGER1 -lt INTEGER2
– True ifINTEGER1
is less thanINTEGER2
. -
INTEGER1 -ge INTEGER2
– True ifINTEGER1
is equal or greater than INTEGER2. -
INTEGER1 -le INTEGER2
– True ifINTEGER1
is equal or less thanINTEGER2
., -
-h
FILE
– True if theFILE
exists and is a symbolic link. -
-r
FILE
– True if theFILE
exists and is readable. -
-w
FILE
– True if theFILE
exists and is writable. -
-x
FILE
– True if theFILE
exists and is executable., -d
FILE
–FILE
が存在し、ディレクトリである場合にTrue。-e
FILE
–FILE
が存在し、タイプ(ノード、ディレクトリ、ソケットなど)に関係なく、ファイルである場合にTrue。).-f
FILE
–FILE
が存在し、通常のファイル(ディレクトリまたはデバイスではない)である場合にTrue。,
結論#
if
、if..else
およびif..elif..else
ステートメントを使用すると、指定された条件を評価することによって、Bashスクリプトの実行