Bashスクリプトは、シェル環境での自動化やタスクの効率化に非常に役立つツールです。特に、条件分岐を理解することで、スクリプトの柔軟性と機能性は大幅に向上します。この記事では、Bashスクリプトで使用する最も基本的な条件分岐構造であるif
文とcase
文の使用法について詳しく解説し、具体的な例を示します。
if文の基本
Bashのif
文は、評価する条件式が真である場合に特定のコマンドを実行し、それ以外の場合に他のコマンドを実行するための構造です。if
文を使うことで、動的かつ柔軟なスクリプトを作成できます。
基本的な構文
if [ 条件式 ]; then
コマンド1
elif [ 追加条件式 ]; then
コマンド2
else
コマンド3
fi
上記の構文を見ると、if
文はelif
やelse
キーワードを含むことができ、これによって複数の条件に応じた異なる処理を記述できます。elif
とelse
は省略可能で、必要に応じて構成を調整できます。
条件式の書き方
[ 条件式 ]
はtest
コマンドの略記であり、スペースに注意が必要です。よく使われる条件式には以下のようなものがあります:
- 数値比較:
-eq
(等しい)、-ne
(等しくない)、-lt
(より小さい)、-le
(以下)、-gt
(より大きい)、-ge
(以上) - 文字列比較:
=
(等しい)、!=
(等しくない) - ファイル判定:
-e
(存在する)、-d
(ディレクトリである)、-f
(ファイルである)
実例
以下のスクリプトは、入力された数値が10より大きいかどうかをチェックします。
#!/bin/bash
read -p "Enter a number: " number
if [ "$number" -gt 10 ]; then
echo "The number is greater than 10."
elif [ "$number" -eq 10 ]; then
echo "The number is exactly 10."
else
echo "The number is less than 10."
fi
このスクリプトを実行すると、ユーザからの入力に応じたメッセージが表示されます。
case文の基本
case
文は、ひとつの変数や値を複数のパターンと照合し、該当するパターンに応じた処理を実行するために使用します。特に、複数の比較条件を持つ場合にif
文よりも見通しよく書けるため便利です。
基本的な構文
case 変数 in
パターン1)
コマンド1
;;
パターン2)
コマンド2
;;
*)
その他のコマンド
;;
esac
case
文では、in
キーワードを用いて変数に対して各パターンを提示し、それにマッチする場合の処理を書くことができます。;;
は各ケースの終了を示し、*
はデフォルトケース(他のいずれにも当てはまらない場合)として役立ちます。
実例
次の例では、ユーザが選択した果物に応じたメッセージを表示します。
#!/bin/bash
echo "Choose a fruit: apple, banana, or cherry"
read fruit
case $fruit in
apple)
echo "You chose apple."
;;
banana)
echo "You chose banana."
;;
cherry)
echo "You chose cherry."
;;
*)
echo "Unknown fruit."
;;
esac
上記のスクリプトを実行すると、ユーザによる果物の選択に基づいて異なるメッセージが表示されます。
if文とcase文を効果的に使う
実行の流れや特定の条件に基づく処理の分岐を考えるとき、一番重要なのは可読性です。短いスクリプトではif
文のみで十分対応できますが、条件が複雑になりすぎるとcase
文による整理が非常に有効になります。
メンテナンス性の確保
どちらの構文も使いすぎると、スクリプトが読みにくくなる可能性があります。ネストされたif
文や過度に複雑なcase
文は避け、スクリプトが理解しやすい形になるよう工夫することが大切です。たとえば、関数を用いて条件ごとの処理を切り分けたり、スクリプトを段階的に開発していくことで可読性やメンテナンス性を確保できます。
結論
Bashスクリプトにおける条件分岐をマスターすることは、日常的なタスクの自動化やカスタムツールの作成に非常に有効です。if
文とcase
文の基本を理解し、実際にどんどん書いてみることでスクリプト作成スキルを向上させていきましょう。多くの場面で役立つこのスキルが、あなたの効率を大いに高めてくれるはずです。
コメント