Bashスクリプトを書く上で重要な制御フローの一つにif else文があります。条件に応じて異なる処理を実行したいときに非常に便利です。この記事では、Bashのif else文について基礎から実用例までを詳しく解説し、スクリプト初心者向けにわかりやすく説明します。
if else文の基本構造
まずは、Bashのif else文の基本構造を見てみましょう。一般的に以下のようになります。
if [ 条件式 ]; then
# 条件式が真の場合に実行されるコマンド
else
# 条件式が偽の場合に実行されるコマンド
fi
構文のポイント
-
if
ブロック開始時の条件式は角括弧[]
で囲むのが一般的です。条件式と括弧の間にはスペースが必要です。 -
then
キーワードの前に新しい行を置くか、セミコロン(;
)を使用して区切ることができます。 - 全体のif else文は
fi
で終了させます。
簡単な例
次に、具体的な例を見てみましょう。
#!/bin/bash
read -p "あなたの年齢を入力してください: " age
if [ "$age" -ge 18 ]; then
echo "あなたは成人です。"
else
echo "あなたは未成年です。"
fi
このスクリプトでは、ユーザーの年齢を入力してもらい、年齢が18以上であれば「成人」、それ以外は「未成年」と表示します。
条件式について
この例では、-ge
(greater than or equal to)を使って、数値の比較を行っています。他にもよく使われる演算子には以下があります:
-
-eq
: 等しい(equal) -
-ne
: 等しくない(not equal) -
-lt
: より小さい(less than) -
-le
: 以下(less than or equal to) -
-gt
: より大きい(greater than)
また、文字列の比較には以下を使用します:
-
=
: 文字列が等しい -
!=
: 文字列が等しくない
elifを使った複数条件
時にはif else文だけでなく、複数の条件を評価したい場合があります。そんなときはelif
を使います。以下にその構造を示します。
#!/bin/bash
read -p "点数を入力してください: " score
if [ "$score" -ge 90 ]; then
echo "成績はAです。"
elif [ "$score" -ge 80 ]; then
echo "成績はBです。"
elif [ "$score" -ge 70 ]; then
echo "成績はCです。"
else
echo "成績はDです。"
fi
ここでelif
を使うことで、スクリプトは最初に90以上かどうかを評価し、続いて80以上、70以上の順序で評価を続け、それぞれに応じたメッセージを出力します。
実用例:ファイルの存在を確認
Bashでは、if else文を使用して、特定のファイルが存在するかどうかを確認するスクリプトを書くことができます。例えば、ディレクトリ内に特定のファイルが含まれているかどうかを確認する簡単なスクリプトを作成します。
#!/bin/bash
file_path="/path/to/your/file.txt"
if [ -f "$file_path" ]; then
echo "ファイル $file_path が存在します。"
else
echo "ファイル $file_path は存在しません。"
fi
この例では、-f
を使用して、指定したパスに対して通常のファイルが存在するかどうかをチェックしています。他のファイルテスト演算子としては以下があります:
-
-d
: ディレクトリの存在をチェック -
-e
: ファイルまたはディレクトリの存在をチェック -
-r
: ファイルの読み取り権限があるかをチェック -
-w
: ファイルの書き込み権限があるかをチェック -
-x
: ファイルの実行権限があるかをチェック
ネストしたif文
場合によっては、if文の中にさらに別のif文を入れることが必要になります。これをネストされたif文と呼びます。
#!/bin/bash
read -p "ユーザー名を入力してください: " username
read -p "パスワードを入力してください: " password
if [ "$username" == "admin" ]; then
if [ "$password" == "1234" ]; then
echo "ログイン成功"
else
echo "パスワードが間違っています"
fi
else
echo "ユーザー名が間違っています"
fi
この例では、ユーザー名が"admin"でかつパスワードが"1234"であるかをチェックしてログイン判定を行います。このように、ネストを用いることでより複雑な条件を評価できます。
条件式の括弧なし記法
標準のBashシェルスクリプトで[
とスペースを使って条件を記述する方法が一般的ですが、これを[[
を用いた記法に変更することで、より強力で包括的な条件評価が可能になります。
#!/bin/bash
read -p "文字を入力してください: " input
if [[ "$input" =~ ^[0-9]+$ ]]; then
echo "入力されたものは数字です。"
else
echo "入力されたものは数字ではありません。"
fi
この例のように、[[
と正規表現を組み合わせることで、入力が数字かどうかをチェックすることができます。
まとめ
Bashの制御構造であるif else文は、条件分岐を実現するための基本的で非常に強力なツールです。単純な条件から複雑なネストされた条件まで、用途に応じて柔軟に対応することが可能です。Bashスクリプトを使った自動化やタスクの効率化を行うには不可欠な知識ですので、ぜひマスターしてください。演習問題を通じてさらに理解を深めることもお勧めします。
コメント