[Linux] if文でのelseの使い方 – 条件分岐処理
Linuxのシェルスクリプトにおけるif
文は、条件に応じて異なる処理を実行するための基本的な構文です。
else
は、if
の条件が満たされなかった場合に実行される処理を定義します。
else
は省略可能で、条件が偽の場合に何も実行しないことも可能です。
- if文とelseの基本的な使い方
- elifを用いた複数条件の分岐
- 条件式の詳細な評価方法
- ネストされたif文の活用法
- 高度な条件分岐のテクニック
elseの使い方
elseの基本構文
else
は、if
文の条件が偽(false)の場合に実行される処理を定義するために使用します。
基本的な構文は以下の通りです。
if [ 条件 ]; then
# 条件が真の場合の処理
else
# 条件が偽の場合の処理
fi
elseを使った条件分岐の例
以下は、数値が10より大きいかどうかを判定し、結果に応じてメッセージを表示する例です。
number=5
if [ $number -gt 10 ]; then
echo "数値は10より大きいです。"
else
echo "数値は10以下です。"
fi
数値は10以下です。
elseを使わない場合の挙動
else
を使用しない場合、if
文の条件が偽の場合は何も実行されません。
以下の例では、条件が偽の場合の処理がないため、何も出力されません。
number=5
if [ $number -gt 10 ]; then
echo "数値は10より大きいです。"
fi
(何も出力されない)
elseを使う際の注意点
else
は必ずif
文とペアで使用する必要があります。else
の後には条件を指定することはできません。
条件を指定したい場合はelif
を使用します。
if
文の条件が複雑な場合、可読性を保つために適切にインデントを行うことが重要です。
elifを使った複数条件の分岐
elifの基本構文
elif
は、if
文の条件が偽の場合に追加の条件を評価するために使用します。
基本的な構文は以下の通りです。
if [ 条件1 ]; then
# 条件1が真の場合の処理
elif [ 条件2 ]; then
# 条件2が真の場合の処理
else
# どちらの条件も偽の場合の処理
fi
elifを使った複数条件の例
以下は、数値に応じて異なるメッセージを表示する例です。
数値が10より大きい、10と等しい、または10より小さいかを判定します。
number=10
if [ $number -gt 10 ]; then
echo "数値は10より大きいです。"
elif [ $number -eq 10 ]; then
echo "数値は10です。"
else
echo "数値は10より小さいです。"
fi
数値は10です。
elifとelseの違い
elif
は追加の条件を評価するために使用され、複数の条件を持つことができます。else
は、すべての条件が偽の場合に実行される処理を定義します。elif
は条件を指定できるのに対し、else
は条件を持たないため、条件分岐の柔軟性が異なります。
elifを使う際の注意点
elif
は複数回使用することができ、必要に応じて任意の数の条件を追加できます。- 各条件は、
elif
の前にif
が必要です。 - 条件の評価順序に注意し、最も特定的な条件を先に配置することが重要です。
これにより、意図した通りの処理が実行されます。
条件式の詳細
数値比較の条件式
Bashでは、数値を比較するためにいくつかの演算子が用意されています。
以下は、主な数値比較演算子です。
演算子 | 説明 | 例 |
---|---|---|
-eq | 等しい | [ $a -eq $b ] |
-ne | 等しくない | [ $a -ne $b ] |
-gt | より大きい | [ $a -gt $b ] |
-lt | より小さい | [ $a -lt $b ] |
-ge | 以上 | [ $a -ge $b ] |
-le | 以下 | [ $a -le $b ] |
文字列比較の条件式
文字列を比較するためには、=
や!=
を使用します。
以下は、主な文字列比較演算子です。
演算子 | 説明 | 例 |
---|---|---|
= | 等しい | [ "$str1" = "$str2" ] |
!= | 等しくない | [ "$str1" != "$str2" ] |
-z | 空文字列 | [ -z "$str" ] |
-n | 非空文字列 | [ -n "$str" ] |
ファイルの存在確認の条件式
ファイルの存在を確認するためには、以下の演算子を使用します。
演算子 | 説明 | 例 |
---|---|---|
-e | 存在する | [ -e "file.txt" ] |
-f | 通常のファイル | [ -f "file.txt" ] |
-d | ディレクトリ | [ -d "directory" ] |
-r | 読み取り可能 | [ -r "file.txt" ] |
-w | 書き込み可能 | [ -w "file.txt" ] |
-x | 実行可能 | [ -x "file.txt" ] |
論理演算子を使った条件式
複数の条件を組み合わせるために、論理演算子を使用します。
主な論理演算子は以下の通りです。
演算子 | 説明 | 例 |
---|---|---|
-a | AND(両方の条件が真) | [ 条件1 -a 条件2 ] |
-o | OR(いずれかの条件が真) | [ 条件1 -o 条件2 ] |
! | NOT(条件が偽) | [ ! 条件 ] |
複数条件を組み合わせる方法
複数の条件を組み合わせる際は、[ ]
の中で論理演算子を使用します。
以下は、数値と文字列の条件を組み合わせた例です。
number=5
str="Hello"
if [ $number -lt 10 ] && [ "$str" = "Hello" ]; then
echo "数値は10未満で、文字列はHelloです。"
fi
数値は10未満で、文字列はHelloです。
このように、条件式を組み合わせることで、より複雑な条件分岐を実現できます。
実践的な例
ファイルの存在を確認して処理を分岐する
ファイルの存在を確認し、存在する場合はその内容を表示し、存在しない場合はエラーメッセージを表示する例です。
file_name="example.txt"
if [ -e "$file_name" ]; then
echo "$file_name の内容:"
cat "$file_name"
else
echo "エラー: $file_name は存在しません。"
fi
example.txt の内容:
(ファイルの内容が表示される)
エラー: example.txt は存在しません。
ユーザー入力に応じた処理の分岐
ユーザーからの入力に基づいて異なるメッセージを表示する例です。
echo "好きな色を入力してください:"
read color
if [ "$color" = "赤" ]; then
echo "あなたは情熱的ですね!"
elif [ "$color" = "青" ]; then
echo "あなたは冷静ですね!"
else
echo "あなたの選んだ色はユニークですね!"
fi
あなたは冷静ですね!
数値の大小による処理の分岐
数値を入力し、その値に応じて異なるメッセージを表示する例です。
echo "数値を入力してください:"
read number
if [ $number -gt 100 ]; then
echo "数値は100より大きいです。"
elif [ $number -eq 100 ]; then
echo "数値は100です。"
else
echo "数値は100より小さいです。"
fi
数値は100より小さいです。
サービスの状態に応じた処理の分岐
特定のサービスが稼働中かどうかを確認し、稼働中であればその旨を表示し、停止中であれば再起動を促す例です。
service_name="httpd"
if systemctl is-active --quiet "$service_name"; then
echo "$service_name は稼働中です。"
else
echo "$service_name は停止中です。再起動します。"
systemctl start "$service_name"
fi
httpd は停止中です。再起動します。
このように、実際のシナリオに基づいて条件分岐を活用することで、柔軟なスクリプトを作成することができます。
ネストされたif文
ネストされたif文の基本構文
ネストされたif文は、if
文の中に別のif
文を含めることで、より複雑な条件分岐を実現します。
基本的な構文は以下の通りです。
if [ 条件1 ]; then
# 条件1が真の場合の処理
if [ 条件2 ]; then
# 条件2が真の場合の処理
else
# 条件2が偽の場合の処理
fi
else
# 条件1が偽の場合の処理
fi
ネストされたif文の例
以下は、数値が正の数かどうかを判定し、さらにその数が偶数か奇数かを判定する例です。
number=4
if [ $number -gt 0 ]; then
echo "数値は正の数です。"
if [ $((number % 2)) -eq 0 ]; then
echo "数値は偶数です。"
else
echo "数値は奇数です。"
fi
else
echo "数値は0以下です。"
fi
数値は正の数です。
数値は偶数です。
ネストされたif文を使う際の注意点
- ネストが深くなると、可読性が低下するため、必要以上にネストを増やさないように注意が必要です。
- 各
if
文のブロックを適切にインデントすることで、構造を明確にし、可読性を向上させることが重要です。 - 複雑な条件分岐が必要な場合は、
elif
や関数を使用して、ネストを減らすことを検討してください。
ネストの深さと可読性のバランス
ネストの深さは、スクリプトの可読性に大きな影響を与えます。
以下のポイントを考慮して、バランスを取ることが重要です。
- 可読性: ネストが深くなると、コードの理解が難しくなります。
可能な限り、条件を平坦に保つことを心がけましょう。
- メンテナンス性: 複雑なネストは、後からの修正や拡張が難しくなるため、シンプルな構造を維持することが望ましいです。
- 関数の利用: 複雑な条件分岐が必要な場合は、条件を関数に分けることで、ネストを減らし、可読性を向上させることができます。
このように、ネストされたif文を適切に使用することで、柔軟な条件分岐を実現しつつ、可読性を保つことが可能です。
高度な条件分岐
複数の条件を一度に評価する方法
Bashでは、複数の条件を一度に評価するために、論理演算子&&
や||
を使用します。
これにより、条件を組み合わせて、より複雑な条件分岐を実現できます。
以下は、数値が正かつ偶数であるかを判定する例です。
number=8
if [ $number -gt 0 ] && [ $((number % 2)) -eq 0 ]; then
echo "数値は正の偶数です。"
else
echo "数値は正の偶数ではありません。"
fi
数値は正の偶数です。
case文との違いと使い分け
case
文は、特定の変数の値に基づいて処理を分岐させるための構文です。
if
文と異なり、case
文は複数の条件を簡潔に記述できるため、特定の値に対する処理が多い場合に便利です。
以下は、case
文の例です。
fruit="りんご"
case $fruit in
"りんご")
echo "果物はりんごです。"
;;
"バナナ")
echo "果物はバナナです。"
;;
*)
echo "未知の果物です。"
;;
esac
果物はりんごです。
if
文は条件式が複雑な場合に適しており、case
文は単純な値の比較に適しています。
状況に応じて使い分けることが重要です。
関数内でのif-elseの使い方
Bashでは、関数内でもif-else
文を使用して条件分岐を行うことができます。
以下は、引数に応じて異なるメッセージを表示する関数の例です。
function check_number {
local number=$1
if [ $number -gt 0 ]; then
echo "数値は正の数です。"
elif [ $number -eq 0 ]; then
echo "数値はゼロです。"
else
echo "数値は負の数です。"
fi
}
check_number 5
check_number 0
check_number -3
数値は正の数です。
数値はゼロです。
数値は負の数です。
条件式の評価を外部コマンドに依存させる
条件式の評価を外部コマンドの結果に基づいて行うことも可能です。
以下は、特定のプロセスが実行中かどうかを確認する例です。
process_name="bash"
if pgrep "$process_name" > /dev/null; then
echo "$process_name は実行中です。"
else
echo "$process_name は実行されていません。"
fi
bash は実行中です。
このように、外部コマンドの結果を条件式に利用することで、より動的な条件分岐を実現できます。
高度な条件分岐を活用することで、スクリプトの柔軟性と機能性を向上させることができます。
よくある質問
まとめ
この記事では、Bashにおける条件分岐処理の基本から高度なテクニックまでを詳しく解説しました。
特に、if
文、else
、elif
、ネストされた条件分岐、さらにはcase
文や外部コマンドを利用した条件評価について触れました。
これらの知識を活用することで、より柔軟で効率的なスクリプトを作成することが可能になります。
ぜひ、実際のスクリプト作成においてこれらのテクニックを試してみてください。