このチュートリアルでは、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を使用します (!コード> )演算子。文字列を比較するときは、単語の分割やグロブの問題を回避するために、常に一重引用符または二重引用符を使用してください。
以下は、最も一般的に使用される演算子の一部です。
-
-nVAR-VARの長さがTrueの場合はTrue ゼロより大きい。 -
-zVAR-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以下 。 -
-hFILE-FILEの場合はTrue 存在し、シンボリックリンクです。 -
-rFILE-FILEの場合はTrue 存在し、読み取り可能です。 -
-wFILE-FILEの場合はTrue 存在し、書き込み可能です。 -
-xFILE-FILEの場合はTrue 存在し、実行可能です。 -
-dFILE-FILEの場合はTrue 存在し、ディレクトリです。 -
-eFILE-FILEの場合はTrue タイプ(ノード、ディレクトリ、ソケットなど)に関係なく、存在し、ファイルです。 -
-fFILE-FILEの場合はTrue 存在し、通常のファイルです(ディレクトリやデバイスではありません)。
結論#
if 、 if..else およびif..elif..else ステートメントを使用すると、特定の条件を評価することにより、Bashスクリプトの実行フローを制御できます。
ご質問やご意見がございましたら、お気軽にコメントをお寄せください。