Skip to content

Bashのif/elif/else条件分岐の使い方

Bashスクリプトにおける条件分岐は、プログラミングの基本ですが、初心者が陥りやすい構文の違いがあります。特に、比較演算子の使い分けと変数の引用符付けが重要です。

問題点:正しく動作しない条件分岐

以下のようなコードは期待通りに動作しません:

bash
aaa="xxx"
if [[ $aaa -eq "bbb" ]]; then
   echo "bbb"
elif [[ $aaa -eq "ccc" ]]; then
   echo "ccc"
else
   echo "something else"
fi

このコードは常に bbb を出力してしまいます。その理由は -eq 演算子の誤った使用 にあります。

解決策:適切な比較演算子の選択

文字列比較には == または = を使用

注意

-eq は数値比較専用の演算子です。文字列比較には使用できません。

正しい文字列比較の構文:

bash
if [[ "$aaa" == "bbb" ]]; then
   echo "bbb"
elif [[ "$aaa" == "ccc" ]]; then
   echo "ccc"
else
   echo "something else"
fi

変数の引用符付け

変数を引用符で囲むことは重要です。これにより、変数が空の場合やスペースを含む場合の予期せぬ動作を防げます。

bash
# 安全な方法:変数を引用符で囲む
if [[ "$aaa" == "bbb" ]]; then

# 危険な方法:引用符がない
if [[ $aaa == "bbb" ]]; then

さまざまな条件分岐の方法

方法1: [[ ]] を使用した条件分岐(推奨)

bash
#!/bin/bash

aaa="xxx"
if [[ "$aaa" == "bbb" ]]; then
   echo "bbb"
elif [[ "$aaa" == "ccc" ]]; then
   echo "ccc"
else
   echo "something else"
fi

方法2: [ ] を使用した条件分岐

bash
#!/bin/bash

aaa="$1"
if [ "$aaa" = "bbb" ]; then
        echo "bbb"
elif [ "$aaa" = "ccc" ]; then
        echo "ccc"
else
        echo "something else"
fi

情報

[[ ]][ ] より高度な機能を提供し、より安全です。Bashスクリプトでは [[ ]] の使用が推奨されます。

方法3: case 文を使用した条件分岐

複数の条件をチェックする場合、case 文はより簡潔で読みやすいコードになります:

bash
#!/bin/bash

case "$aaa" in
    bbb) echo "bbb";;
    ccc) echo "ccc";;
    *) echo "something else";;
esac

使用例と実践的なコード

ユーザー入力に基づく条件分岐

bash
#!/bin/bash

read -p "値を入力してください: " input_value

if [[ "$input_value" == "start" ]]; then
    echo "処理を開始します"
elif [[ "$input_value" == "stop" ]]; then
    echo "処理を停止します"
elif [[ "$input_value" == "restart" ]]; then
    echo "処理を再開します"
else
    echo "不明なコマンド: $input_value"
fi

コマンドの実行結果に基づく条件分岐

bash
#!/bin/bash

# jqコマンドの結果を取得
result=$(jq '.data.result[0].value[1]' readingFromThisfile.out)

if [ "$result" = '"0"' ]; then
    echo "結果は0です"
else
    echo "結果は0以外です: $result"
fi

よくある間違いと回避策

  1. -eq の誤用: 文字列比較に数値演算子を使用しない
  2. 引用符の省略: 変数は常に引用符で囲む
  3. スペースの省略: 条件式内のスペースを忘れない [ condition ]

まとめ

Bashの条件分岐を正しく使用するための重要なポイント:

  • 文字列比較には == または = を使用する
  • 変数は常に引用符で囲む "$variable"
  • 複数条件には case 文を検討する
  • [[ ]][ ] より安全で機能が豊富

これらの基本を押さえることで、Bashスクリプトの条件分岐を効果的に使用できるようになります。