はじめに
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
の場合、コードのロジックを再考してください 深く成長し続けます。