ウェブサイト検索

Bash: if、else if、else の例


この記事に示されている具体的な例には:

  1. 例1: bashにおける文字列の等価性のif文
  2. 例2: bashにおける数値の等しさのif文
  3. 例3: bashにおける数未満のif文
  4. 例4: bashでの論理AND演算子を使用したif文
  5. 例5: bashでの論理OR演算子を使用したif文
  6. 例6:BashにおけるElif条件
  7. 例7: BashスクリプトにおけるIf Else文

BashのIF ELIF ELSEの一般的な構文

次に、bashにおけるIF ELIFおよびELSEの一般的な構文を示します:

if CONDITION-TO-TEST; then
     CODE-TO-EXECUTE-1
elif NEXT-CONDITION-TO-TEST; then
     CODE-TO-EXECUTE-2
elif NEXT-CONDITION-TO-TEST; then
     CODE-TO-EXECUTE-2
else
     CODE-TO-EXECUTE-2
fi

注意: 上記の一般的な構文では、コードブロックにゼロ、1、または複数のELIF条件を含めることができ、ELSE条件はオプションです。

実際の条件の構築には、多くのオプションがあります。なぜなら、bashの構文には非常に多くの異なる機能とオプションがあるからです。しかし、bashスクリプトの基本的なテンプレートは、以下の一般的な構文の例と特定の例に示されているように、[[ ダブルブラケット構文を使用することです。

if [[ CONDITION-TO-TEST ]]; then
     CODE-TO-EXECUTE-1
elif [[ NEXT-CONDITION-TO-TEST ]]; then
     CODE-TO-EXECUTE-2
elif [[ NEXT-CONDITION-TO-TEST ]]; then
     CODE-TO-EXECUTE-2
else
     CODE-TO-EXECUTE-2
fi

注意: コードのフォーマットの美意識によっては、条件の同じ行に「then」を置くのが好みか、以下のように次の行に置くことを選ぶかもしれません。

if [[ CONDITION-TO-TEST ]]
then
     CODE-TO-EXECUTE-1
elif [[ NEXT-CONDITION-TO-TEST ]]
then
     CODE-TO-EXECUTE-2
elif [[ NEXT-CONDITION-TO-TEST ]]
then
     CODE-TO-EXECUTE-2
else
     CODE-TO-EXECUTE-2
fi

さて、以下の作業例で基本的な IF ELIF と ELSE 条件の具体例を示しましょう。

例1: bashにおける文字列の等価性のif文

#!/bin/bash
read -p "Enter a match word: " USER_INPUT
if [[ $USER_INPUT == "hello" ]]; then
     echo "Hello to you as well"
fi

上記の例では、文字列の等しさを単一のテストで使った基本的なIF条件を使用し、条件が真の場合にはユーザーからの入力に基づいて出力を印刷します。好みに応じて、THEN文を次の行に置くこともできます。以下に例の出力を示します。

linux-console@:~$ bash t1.sh
Enter a match word: hello
Hello to you as well
linux-console@:~$ bash t1.sh
Enter a match word: bye
linux-console@:~$

例2: bashにおける数値の等しさのif文

#!/bin/bash
read -p "Enter a number: " USER_INPUT
if [[ $USER_INPUT -eq 7 ]]; then
     echo "7 is a lucky number"
fi

上記の例では、再び簡単なIF条件を行いますが、この場合は数値の比較テストをどのように行うかを示します。以下に、一致する条件と一致しない条件の出力を表示します:

linux-console@:~$ bash t2.sh
Enter a number: 7
7 is a lucky number
linux-console@:~$ bash t2.sh
Enter a number: 8
linux-console@:~$

例3: bashで数より小さい場合のif文

-eqによる等式に加えて、-lt -le -gt -geのテスト条件を用いて、それぞれ「未満」、「以下」、「超過」、「以上」を試すこともできます。以下は、少なくとも演算子-ltの類似の例です。

#!/bin/bash
read -p "Enter a number: " USER_INPUT
if [[ $USER_INPUT -lt 100 ]]; then
     echo "Your entry is less than one hundred"
fi

このスクリプトの出力は、入力が100未満であるかどうかをテストし、その条件に基づいて特定のコードを実行できるようになります:

linux-console@:~$ bash t3.sh
Enter a number: 99
Your entry is less than one hundred
linux-console@:~$ bash t3.sh
Enter a number: 101
linux-console@:~$

例4: bashでの論理AND演算子を使用したif文

この例では、論理 AND 条件を使用して複数の条件をどう組み合わせるかを示します。また、IF 文の構築において論理 OR 条件も使用できます。bash コードにおける論理 AND はダブルアンパサンド && で記述されます。以下は、bash IF 条件における論理 AND の例です:

#!/bin/bash
read -p "Enter a number: " USER_INPUT
if [[ $USER_INPUT -gt 9 && $USER_INPUT -lt 100 ]]; then
     echo "Your entry is two digits"
fi

これをさまざまな出力でテストして、最初の条件と2番目の条件の両方が真である場合にのみ出力が印刷されることを証明します:

linux-console@:~$ bash t4.sh
Enter a number: 22
Your entry is two digits
linux-console@:~$ bash t4.sh
Enter a number: 8
linux-console@:~$ bash t4.sh
Enter a number: 100
linux-console@:~$ bash t4.sh
Enter a number: 99
Your entry is two digits

例5: bashでの論理OR演算子を使用したif文

bashスクリプトにおける論理ORは、ダブルバーティカルバー||で書かれます。論理OR演算子の例を試すために、前の例を少し変更して再度試してみましょう:

#!/bin/bash
read -p "Enter a number: " USER_INPUT
if [[ $USER_INPUT -lt 10 || $USER_INPUT -ge 100 ]]; then
     echo "Your entry is NOT two digits"
fi

この例では、論理OR演算子が二つの条件を組み合わせており、一方または両方の条件が真であれば全体の条件が真となり、コードが実行されます。また、上記の例では、数値の比較において大なりまたは等しいを示す-ge演算子も示しています。スクリプトは以下の出力で予想通りに動作しています。

linux-console@:~$ bash t5.sh
Enter a number: 3
Your entry is NOT two digits
linux-console@:~$ bash t5.sh
Enter a number: 10
linux-console@:~$ bash t5.sh
Enter a number: 99
linux-console@:~$ bash t5.sh
Enter a number: 100
Your entry is NOT two digits
linux-console@:~$ bash t5.sh
Enter a number: 101
Your entry is NOT two digits

例 6: bash における elif 条件

コードブロックでの複数のif条件の例をELIFを使って提供します。コードブロックには0個、1個、または複数のELIF条件を持つことができます。この例では、デモとして2つのELIF条件を提供しますが、実際には任意の数のELIFブロックを使用することができます。

#!/bin/bash
read -p "Enter a number: " USER_INPUT
if [[ $USER_INPUT -lt 0 ]]; then
     echo "Not a valid positive number input"
elif [[ $USER_INPUT -gt 0 && $USER_INPUT -lt 10 ]]; then
     echo "Valid 1 digit number entered"
elif [[ $USER_INPUT -gt 9 && $USER_INPUT -lt 100 ]]; then
     echo "Valid 2 digit number entered"
fi

このコードをさまざまな数字でテストして、どの if または ELIF 条件がトリガーされるかを示します:

linux-console@:~$ bash t6.sh
Enter a number: -1
Not a valid positive number input
linux-console@:~$ bash t6.sh
Enter a number: 1
Valid 1 digit number entered
linux-console@:~$ bash t6.sh
Enter a number: 14
Valid 2 digit number entered
linux-console@:~$ bash t6.sh
Enter a number: 101
linux-console@:~$

例7: BashスクリプトにおけるIf Else文

今からELSE条件を示します。IF条件またはすべてのELIF条件が存在しない場合にELSE条件が使用され、そのELSE条件内のコードが実行されます。前の例にELSE条件の例を加えますが、明確にするためにELIFはELSE条件を利用するために必要ではありません。ELSE条件はIF条件とともに、ELIF条件なしで使用できます。

#!/bin/bash
read -p "Enter a number: " USER_INPUT
if [[ $USER_INPUT -lt 0 ]]; then
     echo "Not a valid positive number input"
elif [[ $USER_INPUT -gt 0 && $USER_INPUT -lt 10 ]]; then
     echo "Valid 1 digit number entered"
elif [[ $USER_INPUT -gt 9 && $USER_INPUT -lt 100 ]]; then
     echo "Valid 2 digit number entered"
else
     echo "A valid 2 digit number was not entered"
fi

サンプルコードをテストしてみましょう、ELSE条件に該当する簡単なテストケースで:

linux-console@:~$ bash t7.sh
Enter a number: 199
A valid 2 digit number was not entered
linux-console@:~$

結論

私たちは、bashスクリプトやbashプログラムにおいて、条件付き実行を形成するために、IF、ELIF、およびELSE条件をさまざまな組み合わせで使用する方法を見てきました。次のステップとして、条件のテスト条件や、条件をテストするために利用可能なバリエーションや種類を学ぶことができます。また、bashスクリプトにおける条件論理の代替としてbashのcase文を考慮することもできます。最後に、GNU Bashリファレンスマニュアルは、正確な構文の詳細を探す際に良い情報源です。