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

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

はじめに

Bashスクリプトは、マシン上のタスクを自動化するのに役立ちます。 if elif else bashスクリプトのステートメントを使用すると、特定のコード結果に対する条件付きのケースと応答を作成できます。 if 条件付きは、プログラム中の意思決定プロセスを自動化するのに役立ちます。

この記事では、if elif elseについて説明します ステートメントは、さまざまな例を通じて構文を示しています。

前提条件

  • LinuxOSを搭載したマシン。
  • コマンドライン/ターミナルへのアクセス。
  • Vi/Vimなどのテキストエディタへのアクセス。

Bash ifステートメントとは何ですか?

プログラミングでは、 if ステートメントは条件式です。ただし、コマンドは ifでテストされています ステートメントは、終了ステータスに基づいて評価されます 。したがって:

  • コマンドが正常に完了した場合 、終了ステータスは 0
  • ステートメントがエラーをスローした場合 、終了ステータスは 1の間の任意の数値です および255

成功の場合はゼロ、失敗の場合はゼロ以外の値は直感に反しているようです。他のほとんどのプログラミング言語では、0はfalseを表し、1(またはそれ以上)はtrueを表します。ただし、bashスクリプトでは、UNIX規則は真理値ではなく終了ステータスを返すため、この2つを混同しないでください。

次のコマンドを実行して、ターミナルでサンプルエラーコマンド(100より大きい1)をテストします。

test 1 -gt 100

echoコマンドを使用して終了ステータスを確認します:

echo $?

テストは終了コード1を返します 、式が失敗したことを示します。

同様に、ターミナルで正常に評価される(100より大きい1000)サンプルコマンドを次のように確認します。

test 1000 -gt 100

終了ステータスを出力して、コマンドが成功したことを確認します。

echo $?

テストは終了コード0を返します 、コマンドがエラーなしで完了したことを示しています。

Bashifステートメントの例

以下の手順に従って、 ifを使用してサンプルのbashスクリプトを作成します。 ステートメント。

1.ターミナルを開きます( CTRL + ALT + T )そして、bash ifがどのように行われるかをテストするためのサンプルスクリプトを作成します ステートメントは機能します:

vi test_script.sh

2.スクリプトに、次の行を追加します。

echo -n "Please enter a whole number: "
read VAR
echo Your number is $VAR
if test $VAR -gt 100
then
        echo "It's greater than 100"
fi
echo Bye!

スクリプトの各行は次のことを行います:

  • 1〜3行目 コンソールから番号を入力する手順を提供します。数値はVARという変数に読み込まれます と印刷されます。
  • 4行目 ifを開始します ステートメントを実行し、( $VAR -gt 100の直後のコマンドの終了ステータスを確認します。
  • 5〜6行目 4行目のステートメントが正常に(終了ステータス0で)完了した場合にのみ実行するコマンドの開始を通知します。これは、100より大きい数値を入力したことを意味します。
  • 7行目 ifの終了を通知します ステートメント。
  • 8行目 ifに関係なく、ステートメントの外にあり、期待どおりに実行されます 結果。

3. Vimを保存して閉じます:

:wq

4.次に、ファイルを実行可能にします。

chmod +x test_script.sh

5.最後に、次のコマンドを使用してスクリプトを実行します:

./test_script.sh

スクリプトは、入力された番号に基づいて異なるメッセージを出力します。スクリプトを複数回実行し、他の数値をテストして動作を確認します。

Bashifステートメント構文

bashの基本構文if ステートメントは次のとおりです:

if <commands>
then
        <commands>
fi

各キーワードには特定の機能があります:

  • if ステートメントの開始を通知します。直後のコマンドは、終了ステータスチェックが適用されるコマンドです。
  • then 前のレビューが正常に完了した場合にのみコマンドを実行します。
  • fi ifステートメントを閉じます。

テストコマンドをさまざまな角かっこで囲むと、 ifの実行方法が異なります。 声明。次の表に、各ブラケットタイプの簡単な説明と使用例を示します。

構文 それは何ですか いつ使用するか
if ( <commands> ) サブプロセスで実行されるサブシェル。 コマンドが現在のシェルまたは環境に影響を与える場合。サブシェルが完了しても、変更は残りません。
if (( <commands> )) Bash拡張。 算術演算とCスタイルの変数操作に使用します。
if [ <commands> ] POSIXビルトイン、 test <commands>のエイリアス 数値を比較し、ファイルが存在するかどうかをテストします。
if [[ <commands> ]] Bash拡張機能、単一の角括弧の高度なバージョン。 ワイルドカードパターンに一致する文字列。

以下は、各ブラケットタイプを使用するbashスクリプトの例と、より詳細な説明です。

単一括弧構文

bashスクリプトで単一の括弧を使用すると、サブシェルが作成されます。 ifと組み合わせた場合 ステートメントの場合、サブプロセスはプログラムを続行する前に終了します。 if 終了ステータスを分析し、それに応じて動作します。

バッシュif 単一括弧構文のステートメントは次のようになります:

if ( <commands> )
then
        <commands>
fi

以下の例を試して、サブプロセスが ifと一緒にどのように動作するかを確認してください ステートメント:

1. Vimを使用してスクリプトを作成します:

vi single_parentheses.sh

2.次のコード行をスクリプトに追加します。

outer_variable=Defined
echo Before if:
echo inner_variable = $inner_variable
echo outer_variable = $outer_variable
if (
        echo Inside subshell:
        inner_variable=Defined
        echo inner_variable = $inner_variable
        outer_variable=Changed
        echo outer_variable = $outer_variable
)
then
        echo After then:
        echo inner_variable = $iner_variable
        echo outer_variable = $outer_variable
fi
echo After fi:
echo inner_variable = $inner_variable
echo outer_variable = $outer_variable

プログラムは次のことを行います:

  • 1行目 outer_variableという変数を作成します ここに文字列Definedを格納します
  • 2〜4行目 変数をコンソールに出力します。現時点では、 outer_variable inner_variableが文字列を格納している間、 空白です。
  • 5行目 ifを開始します ステートメントとサブプロセス、単一の括弧で区切られます。
  • 6-11行目 inner_variable内に文字列を格納します outer_variableを変更します 別の文字列に。両方の値がコンソールに出力され、サブプロセスは終了コードで終了します。この場合、サブプロセスは終了コード 0で正常に終了します。
  • 12-16行目 サブプロセスの後に実行し、変数値を出力します。ただし、値は ifの前の値に戻ります。 声明。サブプロセスは値をローカルにのみ保存し、グローバルには保存しません。
  • 16〜19行目 thenのコマンドの後に実行します 句。値はステートメントの外では変更されません。

3.スクリプトを保存して、エディターを閉じます。

:wq

4.スクリプトを実行可能にします:

chmod +x single_parentheses.sh

5.最後に、例を実行して結果をテストします。

./single_parentheses.sh

プログラムが進行するにつれて、出力は変数の状態を出力します。

二重括弧構文

bashの二重括弧if ステートメントは次のとおりです:

if (( <commands> ))
then
        <commands>
fi

bashの二重括弧構造により、次のことが可能になります。

  • 算術評価 。変数をa=$(( 1+1 ))として定義する 方程式を計算し、 aを設定します 2に。
  • Cスタイルの変数操作。 たとえば、 (( a++ ))を使用して変数をインクリメントします

ifで二重括弧構文を使用する場合 ステートメントでは、評価の動作が異なります。式が0と評価されたとします。 、次に if テストに合格しません。

次の例を試して、二重括弧がどのように機能するかを確認してください。

1.ターミナルでbashスクリプトを作成します:

vi double_parentheses.sh

2.次のコードをdouble_parentheses.shに追加します :

variable=-2
echo Before first if: $variable
if (( variable++ ))
then
        echo Incremented ++ style: $variable
fi
echo After first if: $variable
if (( variable=variable+1 ))
then
        echo Incremented arithmetically $variable
fi
echo After second if: $variable

スクリプトの各行番号は次のようになります。

  • 1行目 変数を定義し、値を -2に設定します
  • 3〜5行目 二重括弧内の値Cスタイルをインクリメントし、値をチェックします。変数がゼロでない場合、ifはコンソールにメッセージを出力します。
  • 8〜10行目 通常の算術表記を使用して変数を1つインクリメントし、変数がゼロでない場合はメッセージを出力します。

3.スクリプトを保存してVimを閉じます:

:wq

4.スクリプトのアクセス許可を実行可能ファイルに変更します:

chmod +x double_parentheses.sh

5.スクリプトを実行して、結果を確認します。

./double_parentheses.sh

シングルブラケット構文

単一の角かっこは、testの別名です。 コマンドと、すべてのシェルで使用可能な標準のPOSIXユーティリティ。基本的な構文は次のとおりです。

if [ <commands> ]
then
        <commands>
fi

最初のbashif このチュートリアルで提供されている例( test_script.sh )代替構文でも同様に機能します:

echo -n "Please enter a whole number: "
read VAR
echo Your number is $VAR
if [ $VAR -gt 100 ]
then
        echo "It's greater than 100"
fi
echo Bye!

スクリプトを実行して、出力が同等であることを確認します。ブラケット構文の使用に関する完全なドキュメントと詳細については、 testでmanコマンドを実行してください。 ユーティリティ:

man test

二重括弧構文

bashの二重括弧の構文if 移植性が必要ない場合は、スクリプトが最適なオプションです。ダブルブラケットはシングルブラケットよりも優れており、多くの高度なオプションが含まれています。構文は次のとおりです。

if [[ <commands> ]]
then
        <commands>
fi

以下の例を試して、 ifでワイルドカード文字列照合がどのように機能するかを確認してください。 コマンド:

1. double_bracketsというシェルスクリプトファイルを作成します :

vi double_brackets.sh

2.次のコードを追加します:

if [[ $USER == k* ]]
then
        echo Hello $USER
fi
echo Bye!

3.スクリプトは、ユーザー名の開始文字が kであるかどうかを確認します そうである場合は、helloメッセージを送信します。スクリプトを保存して閉じます:

:wq

4. chmodを使用してファイルを実行可能にします:

chmod +x double_brackets.sh

5.次のコマンドでプログラムを実行します:

./double_brackets.sh

その他の種類のBash条件文

if ステートメントは、1つの条件付きチェックのみを実行します。 ifを変更します 他のタイプのbash条件を使用して、複雑な評価を作成します。

ifelseステートメント

if else ステートメントは、チェックされた条件の出力に基づいてさまざまなアクションを定義する1つの方法を提供します。基本的な構文は次のとおりです。

if <command>
then
	<commands>
else
	<commands>
fi

次の例は、 if else 条件付き作品:

1. Vimを使用して新しいスクリプトを作成します:

vi if_else.sh

2.次のコードをスクリプトに挿入します。

echo -n "Please enter a whole number: "
read VAR
echo Your number is $VAR
if [ $VAR -gt 100 ]
then
        echo "It's greater than 100"
else
        echo "It's less than 100"
fi
echo Bye!

このステートメントは、4行目のコマンド出力をチェックします 結果に基づいて説明メッセージを出力します:

  • 入力した数値が100より大きい場合 、プログラムは6行目に入ります メッセージを出力します。
  • 数が100未満の場合 、 elseのメッセージ 条項(8行目 )コンソールに出力します。

3.スクリプトを保存してVimを閉じます:

:wq

4.スクリプトを実行可能にします:

chmod +x if_else.sh

5.最後に、スクリプトを複数回実行し、さまざまな値をテストします。

./if_else.sh

ifelifステートメント

elif if elseと組み合わせた句 ステートメントは複数の条件付きチェックを作成します。 if elif さまざまな結果を持つ一連のチェックを作成します。構文は次のとおりです。

if <command>
then
        <commands>
elif <command>
then
        <commands>
else
        <commands>
fi

elifを使用してスクリプトを作成するには

1. elifという名前のシェルファイルを作成します :

vi elif.sh

2. elif.shで ファイルに、次のサンプルコードを追加します。

echo -n "Please enter a whole number: "
read VAR
echo Your number is $VAR
if [ $VAR -gt 100 ]
then
        echo "It's greater than 100"
elif [ $VAR -lt 100 ]
then
        echo "It's less than 100"
else
        echo "It's exactly 100"
fi
echo Bye!

この例では、 elifを追加します 7行目を確認してください 入力した数値が100未満かどうかを確認します。4行目と7行目のステートメントが両方とも失敗した場合、プログラムはelse句にジャンプします。

3.ファイルを保存して閉じます:

:wq

4. elif.shを作成します 実行可能ファイル:

chmod +x elif.sh

5.スクリプトを複数回実行し、さまざまな数値の動作を確認します。

./elif.sh

複数のelifを追加します さらに詳細なチェックのためにステートメントを分岐する句。 ifの場合 およびelif パターンシリーズが大きくなる場合は、caseを使用することをお勧めします。 ステートメント。

ネストされたifステートメント

ネストされたif ステートメントは、 if内にブランチを追加します 。具体的には、コマンドが最初のifチェックに合格すると、新しいチェックを通過して結果をさらにフィルタリングします。構文は次のとおりです。

if <commands>
then
        if <commands>
        then
                <commands>
        fi
fi

ネストされたifは、多次元配列を検索するために一般的に使用されます。ただし、ネストされた ifが2つまたは3つを超えることは避けてください。 プログラムの複雑さを軽減するステートメント。ネストされたifの場合、コードのロジックを再考してください 深く成長し続けます。


Linux
  1. 簡単なBash完了チュートリアル??

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

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

  1. 実際の例を含む Bash シェルの終了ステータスのチュートリアル

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

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

  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' ステートメント