GNU/Linux >> Linux の 問題 >  >> Linux

Bashif..elseステートメント

このチュートリアルでは、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の場合はTrue INTEGER2より大きい 。
  • INTEGER1 -lt INTEGER2 - INTEGER1の場合はTrue INTEGER2未満です 。
  • INTEGER1 -ge INTEGER2 - INTEGER1の場合はTrue INTEGER2以上です。
  • INTEGER1 -le INTEGER2 - INTEGER1の場合はTrue INTEGER2以下 。
  • -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スクリプトの実行フローを制御できます。

ご質問やご意見がございましたら、お気軽にコメントをお寄せください。


Linux
  1. Bashスクリプトでifelse条件文を使用する方法

  2. 4 Bash If ステートメントの例 ( If then fi, If then else fi, If elif else fi, Nested if )

  3. Bash/sh 'if else' ステートメント

  1. 例を含む Bash If-Else ステートメント

  2. 4 Awk If ステートメントの例 ( if, if else, if else if, :? )

  3. 5 Bash Case ステートメントの例

  1. Bash if elif elseステートメント:包括的なチュートリアル

  2. Bash宣言ステートメント:構文と例

  3. bashにgotoステートメントはありますか?