
このチュートリアルでは、Bashの if
の基本について説明します。 ステートメントを作成し、シェルスクリプトでの使用方法を示します。
意思決定は、コンピュータープログラミングの最も基本的な概念の1つです。他のプログラミング言語と同様に、 if
、 if..else
、 if..elif..else
、およびネストされた if
Bashのステートメントは、特定の条件に基づいてコードを実行するために使用されます。
if
ステートメント#
if
をbashする 条件文はさまざまな形式を持つことができます。最も基本的なif
ステートメントは次の形式を取ります:
if TEST-COMMAND
then
STATEMENTS
fi
if
ステートメントはif
で始まります キーワードの後に条件式とthen
が続く キーワード。ステートメントはfi
で終わります キーワード。
TEST-COMMAND
の場合 True
と評価されます 、 STATEMENTS
実行されます。 TEST-COMMAND
の場合 False
を返します 、 何も起こりません; STATEMENTS
無視されます。
一般に、コードをインデントし、コードブロックを空白行で区切ることを常にお勧めします。ほとんどの人は、4スペースまたは2スペースのインデントを使用することを選択します。インデントと空白行により、コードが読みやすく整理されます。
指定された数値が10より大きいかどうかをチェックする次のスクリプト例を見てみましょう。
#!/bin/bash
echo -n "Enter a number: "
read VAR
if [[ $VAR -gt 10 ]]
then
echo "The variable is greater than 10."
fi
コードをファイルに保存し、コマンドラインから実行します:
bash test.sh
スクリプトにより、番号の入力を求められます。たとえば、15と入力すると、 test
コマンドはtrue
と評価されます 15は10より大きいため、 echo
then
内のコマンド 句が実行されます。
The variable is greater than 10.
if..else
ステートメント#
バッシュif..else
ステートメントは次の形式を取ります:
if TEST-COMMAND
then
STATEMENTS1
else
STATEMENTS2
fi
TEST-COMMAND
の場合 True
と評価されます 、 STATEMENTS1
実行されます。それ以外の場合、 TEST-COMMAND
False
を返します 、 STATEMENTS2
実行されます。 else
は1つだけ持つことができます ステートメントの句。
else
を追加しましょう 前のサンプルスクリプトの句:
#!/bin/bash
echo -n "Enter a number: "
read VAR
if [[ $VAR -gt 10 ]]
then
echo "The variable is greater than 10."
else
echo "The variable is equal or less than 10."
fi
コードを実行して数値を入力すると、スクリプトは、数値が10より大きいか小さいか、または等しいかに基づいて、異なるメッセージを出力します。
if..elif..else
ステートメント#
バッシュif..elif..else
ステートメントは次の形式を取ります:
if TEST-COMMAND1
then
STATEMENTS1
elif TEST-COMMAND2
then
STATEMENTS2
else
STATEMENTS3
fi
TEST-COMMAND1
の場合 True
と評価されます 、 STATEMENTS1
実行されます。 TEST-COMMAND2
の場合 True
と評価されます 、 STATEMENTS2
実行されます。どのテストコマンドもTrue
と評価されない場合 、 STATEMENTS2
実行されます。
1つ以上のelif
を持つことができます ステートメント内の句。 else
句はオプションです。
条件は順番に評価されます。条件がTrue
を返すと 、残りの条件は実行されず、プログラム制御は if
の最後に移動します ステートメント。
elif
を追加しましょう 前のスクリプトの句:
#!/bin/bash
echo -n "Enter a number: "
read VAR
if [[ $VAR -gt 10 ]]
then
echo "The variable is greater than 10."
elif [[ $VAR -eq 10 ]]
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 [[ $VAR1 -ge $VAR2 ]]
then
if [[ $VAR1 -ge $VAR3 ]]
then
echo "$VAR1 is the largest number."
else
echo "$VAR3 is the largest number."
fi
else
if [[ $VAR2 -ge $VAR3 ]]
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.
一般に、 case
を使用する方が効率的です ネストされたif
の代わりにステートメント ステートメント。 複数の条件#
論理的な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 [[ $VAR1 -ge $VAR2 ]] && [[ $VAR1 -ge $VAR3 ]]
then
echo "$VAR1 is the largest number."
elif [[ $VAR2 -ge $VAR1 ]] && [[ $VAR2 -ge $VAR3 ]]
then
echo "$VAR2 is the largest number."
else
echo "$VAR3 is the largest number."
fi
テスト演算子#
Bashでは、 test
コマンドは、次の構文形式のいずれかを取ります。
test EXPRESSION
[ EXPRESSION ]
[[ EXPRESSION ]]
スクリプトを移植可能にするには、古いテスト[
を使用することをお勧めします コマンド。すべてのPOSIXシェルで使用できます。 test
の新しいアップグレードバージョン コマンド[[コード> (二重括弧)は、デフォルトのシェルとしてBash、Zsh、およびKshを使用する最新のシステムでサポートされています。
テスト式を無効にするには、論理的な NOT
を使用します (!コード> )演算子。文字列を比較するときは、単語の分割やグロブの問題を回避するために、常に一重引用符または二重引用符を使用してください。
以下は、最も一般的に使用される演算子の一部です。
-
-n
VAR
-VAR
の長さがTrueの場合はTrue ゼロより大きい。 -
-z
VAR
-VAR
の場合はTrue 空です。 -
STRING1 =STRING2
-STRING1
の場合はTrue およびSTRING2
等しい。 -
STRING1!=STRING2
-STRING1
の場合はTrue およびSTRING2
等しくありません。 -
INTEGER1 -eq INTEGER2
-INTEGER1
の場合はTrue およびINTEGER2
等しい。 -
INTEGER1 -gt INTEGER2
-INTEGER1
の場合はTrueINTEGER2
より大きい 。 -
INTEGER1 -lt INTEGER2
-INTEGER1
の場合はTrueINTEGER2
未満です 。 -
INTEGER1 -ge INTEGER2
-INTEGER1
の場合はTrue INTEGER2以上です。 -
INTEGER1 -le INTEGER2
-INTEGER1
の場合はTrueINTEGER2
以下 。 -
-h
FILE
-FILE
の場合はTrue 存在し、シンボリックリンクです。 -
-r
FILE
-FILE
の場合はTrue 存在し、読み取り可能です。 -
-w
FILE
-FILE
の場合はTrue 存在し、書き込み可能です。 -
-x
FILE
-FILE
の場合はTrue 存在し、実行可能です。 -
-d
FILE
-FILE
の場合はTrue 存在し、ディレクトリです。 -
-e
FILE
-FILE
の場合はTrue タイプ(ノード、ディレクトリ、ソケットなど)に関係なく、存在し、ファイルです。 -
-f
FILE
-FILE
の場合はTrue 存在し、通常のファイルです(ディレクトリやデバイスではありません)。
結論#
if
、 if..else
およびif..elif..else
ステートメントを使用すると、特定の条件を評価することにより、Bashスクリプトの実行フローを制御できます。
ご質問やご意見がございましたら、お気軽にコメントをお寄せください。