[Linux] if文の使い方 – 条件に合わせて実行コマンドを切り替える
Linuxのシェルスクリプトでif
文を使用すると、条件に応じて異なるコマンドを実行できます。
基本的な構文はif [ 条件 ]; then コマンド; fi
です。
else
やelif
を使うことで、複数の条件に対応できます。
例えば、if [ -f ファイル名 ]; then echo "ファイルが存在します"; else echo "ファイルが存在しません"; fi
のように、ファイルの存在を確認してメッセージを表示することが可能です。
条件式には-f
(ファイル存在確認)や-d
(ディレクトリ確認)などが使えます。
- if文の基本構文と使い方
- 条件式の詳細な解説
- 複数条件の評価方法
- 実践的な条件分岐の例
- 応用的なif文の活用法
if文の基本構文
Bashにおけるif文は、条件に基づいて異なるコマンドを実行するための基本的な制御構文です。
これにより、スクリプトの柔軟性が向上します。
if文の基本的な書き方
if文の基本的な構文は以下の通りです。
if [ 条件 ]; then
# 条件が真の場合に実行するコマンド
fi
この構文では、条件が真である場合に、thenの後に続くコマンドが実行されます。
条件式の書き方
条件式は、[
と ]
で囲む必要があります。
条件式の例として、ファイルの存在確認や数値の比較などがあります。
if [ -e "file.txt" ]; then
echo "ファイルは存在します"
fi
この例では、file.txt
が存在する場合にメッセージが表示されます。
thenとfiの役割
- then: 条件が真である場合に実行するコマンドの開始を示します。
- fi: if文の終了を示します。
これにより、if文のブロックが明確に区切られます。
elseとelifの使い方
if文には、条件が偽の場合に実行するコマンドを指定するためのelse
や、複数の条件を評価するためのelif
を追加できます。
if [ 条件1 ]; then
# 条件1が真の場合のコマンド
elif [ 条件2 ]; then
# 条件2が真の場合のコマンド
else
# どちらの条件も偽の場合のコマンド
fi
この構文を使うことで、より複雑な条件分岐が可能になります。
複数条件の評価方法
複数の条件を評価する場合、論理演算子を使用します。
AND条件は&&
、OR条件は||
を使います。
if [ 条件1 ] && [ 条件2 ]; then
echo "両方の条件が真です"
fi
この例では、条件1と条件2の両方が真である場合にメッセージが表示されます。
条件式の詳細
条件式は、if文の中で評価される条件を定義するための重要な要素です。
ここでは、さまざまな条件式の詳細について説明します。
ファイルの存在確認
ファイルやディレクトリの存在を確認するためのオプションがあります。
-fオプション(ファイルの存在確認)
-f
オプションは、指定したパスが通常のファイルであるかどうかを確認します。
if [ -f "file.txt" ]; then
echo "file.txtは存在する通常のファイルです"
fi
この例では、file.txt
が存在する場合にメッセージが表示されます。
-dオプション(ディレクトリの存在確認)
-d
オプションは、指定したパスがディレクトリであるかどうかを確認します。
if [ -d "directory" ]; then
echo "directoryは存在するディレクトリです"
fi
この例では、directory
が存在する場合にメッセージが表示されます。
数値の比較
数値を比較するためのオプションも用意されています。
-eq, -ne, -lt, -le, -gt, -geの使い方
これらのオプションは、数値の比較を行うために使用されます。
オプション | 説明 | 例 |
---|---|---|
-eq | 等しい | if [ $a -eq $b ]; then |
-ne | 等しくない | if [ $a -ne $b ]; then |
-lt | より小さい | if [ $a -lt $b ]; then |
-le | 以下 | if [ $a -le $b ]; then |
-gt | より大きい | if [ $a -gt $b ]; then |
-ge | 以上 | if [ $a -ge $b ]; then |
これにより、数値に基づいた条件分岐が可能になります。
文字列の比較
文字列を比較するための方法もあります。
=, !=の使い方
=
は文字列が等しいかどうかを確認し、!=
は等しくないかどうかを確認します。
if [ "$str1" = "$str2" ]; then
echo "文字列は等しい"
fi
if [ "$str1" != "$str2" ]; then
echo "文字列は等しくない"
fi
この例では、文字列の比較に基づいてメッセージが表示されます。
-z, -nオプション(文字列の長さ確認)
-z
: 文字列が空であるかどうかを確認します。-n
: 文字列が空でないかどうかを確認します。
# str="Hello World"
if [ -z "$str" ]; then
echo "文字列は空です"
fi
if [ -n "$str" ]; then
echo "文字列は空ではありません"
fi
これにより、文字列の長さに基づいた条件分岐が可能になります。
論理演算子の使用
複数の条件を組み合わせるために、論理演算子を使用します。
AND(&&)とOR(||)の使い方
&&
: 両方の条件が真である場合に実行されます。||
: いずれかの条件が真である場合に実行されます。
if [ 条件1 ] && [ 条件2 ]; then
echo "両方の条件が真です"
fi
if [ 条件1 ] || [ 条件2 ]; then
echo "いずれかの条件が真です"
fi
これにより、複雑な条件分岐が可能になります。
実行コマンドの切り替え
if文を使用することで、条件に応じて異なるコマンドを実行することができます。
これにより、スクリプトの動作を柔軟に制御できます。
条件に応じたコマンドの実行
基本的なif文を使って、条件に応じたコマンドを実行する方法を示します。
if [ -f "file.txt" ]; then
echo "file.txtは存在します"
else
echo "file.txtは存在しません"
fi
この例では、file.txt
が存在する場合にメッセージが表示され、存在しない場合には別のメッセージが表示されます。
elseを使ったデフォルト処理
else
を使用することで、if文の条件が偽である場合に実行するデフォルトの処理を指定できます。
if [ "$user" = "admin" ]; then
echo "管理者としてログインしました"
else
echo "一般ユーザーとしてログインしました"
fi
この例では、ユーザーがadmin
であれば管理者メッセージが表示され、それ以外の場合は一般ユーザーのメッセージが表示されます。
elifを使った複数条件の分岐
elif
を使用することで、複数の条件を評価し、それぞれに対して異なる処理を実行できます。
score=75
if [ "$score" -ge 80 ]; then
echo "優秀"
elif [ "$score" -ge 60 ]; then
echo "合格"
else
echo "不合格"
fi
この例では、スコアに応じて異なる評価が表示されます。
コマンドの実行結果を条件に使う
コマンドの実行結果を条件として使用することも可能です。
これにより、実行したコマンドの成功や失敗に基づいて処理を分岐できます。
$?(直前のコマンドの終了ステータス)の利用
$?
を使用することで、直前に実行したコマンドの終了ステータスを取得できます。
終了ステータスが0の場合は成功、それ以外は失敗を示します。
cp source.txt destination.txt
if [ $? -eq 0 ]; then
echo "コピー成功"
else
echo "コピー失敗"
fi
この例では、source.txt
のコピーが成功したかどうかに応じてメッセージが表示されます。
実践的な例
ここでは、実際のシナリオに基づいたif文の使用例をいくつか紹介します。
これにより、条件分岐の実践的な使い方を理解できます。
ファイルの存在を確認して処理を分岐する
特定のファイルが存在するかどうかを確認し、その結果に基づいて処理を分岐する例です。
if [ -f "config.txt" ]; then
echo "設定ファイルが見つかりました。"
# 設定ファイルを読み込む処理
else
echo "設定ファイルが見つかりません。デフォルト設定を使用します。"
# デフォルト設定を適用する処理
fi
この例では、config.txt
が存在する場合に設定ファイルを読み込み、存在しない場合はデフォルト設定を使用します。
数値の比較を使った条件分岐
数値を比較して、異なる処理を実行する例です。
score=75
if [ "$score" -ge 90 ]; then
echo "優秀です!"
elif [ "$score" -ge 60 ]; then
echo "合格です。"
else
echo "不合格です。"
fi
この例では、スコアに応じて異なる評価メッセージが表示されます。
文字列の比較を使った条件分岐
文字列を比較して、異なる処理を実行する例です。
username="guest"
if [ "$username" = "admin" ]; then
echo "管理者としてログインしました。"
elif [ "$username" = "guest" ]; then
echo "ゲストとしてログインしました。"
else
echo "一般ユーザーとしてログインしました。"
fi
この例では、ユーザー名に応じて異なるログインメッセージが表示されます。
複数の条件を組み合わせた例
AND条件やOR条件を使用して、複数の条件を組み合わせた例です。
age=20
is_student=true
if [ "$age" -lt 30 ] && [ "$is_student" = true ]; then
echo "学生割引が適用されます。"
else
echo "通常料金が適用されます。"
fi
この例では、年齢が30歳未満でかつ学生である場合に学生割引が適用されます。
コマンドの実行結果に基づく処理
コマンドの実行結果を条件にして処理を分岐する例です。
mkdir new_directory
if [ $? -eq 0 ]; then
echo "ディレクトリの作成に成功しました。"
else
echo "ディレクトリの作成に失敗しました。"
fi
この例では、new_directory
の作成が成功したかどうかに応じてメッセージが表示されます。
応用例
if文はさまざまなシナリオで活用でき、スクリプトの柔軟性を高めることができます。
ここでは、いくつかの応用例を紹介します。
複数のファイルを条件にした処理
複数のファイルの存在を確認し、それに基づいて処理を分岐する例です。
if [ -f "file1.txt" ] && [ -f "file2.txt" ]; then
echo "両方のファイルが存在します。"
# 両方のファイルを処理する処理
elif [ -f "file1.txt" ]; then
echo "file1.txtのみが存在します。"
# file1.txtを処理する処理
elif [ -f "file2.txt" ]; then
echo "file2.txtのみが存在します。"
# file2.txtを処理する処理
else
echo "どちらのファイルも存在しません。"
fi
この例では、file1.txt
とfile2.txt
の存在に応じて異なるメッセージが表示されます。
ユーザー入力に基づく条件分岐
ユーザーからの入力に基づいて処理を分岐する例です。
read -p "あなたの名前を入力してください: " name
if [ "$name" = "admin" ]; then
echo "管理者としてログインしました。"
else
echo "$nameさん、ようこそ!"
fi
この例では、ユーザーがadmin
と入力した場合に特別なメッセージが表示されます。
システムの状態に応じた処理
システムの状態を確認し、それに基づいて処理を行う例です。
if [ "$(uname)" = "Linux" ]; then
echo "このシステムはLinuxです。"
elif [ "$(uname)" = "Darwin" ]; then
echo "このシステムはmacOSです。"
else
echo "このシステムはLinuxでもmacOSでもありません。"
fi
この例では、システムのOSに応じて異なるメッセージが表示されます。
ループと組み合わせたif文の使い方
ループとif文を組み合わせて、条件に基づいて処理を行う例です。
for file in *.txt; do
if [ -f "$file" ]; then
echo "$fileは存在します。"
else
echo "$fileは存在しません。"
fi
done
この例では、カレントディレクトリ内のすべての.txt
ファイルについて、存在確認を行い、その結果を表示します。
関数内でのif文の活用
関数内でif文を使用して、特定の条件に基づいた処理を行う例です。
check_file() {
if [ -f "$1" ]; then
echo "$1は存在します。"
else
echo "$1は存在しません。"
fi
}
check_file "file.txt"
check_file "another_file.txt"
この例では、check_file関数
を定義し、引数として渡されたファイルの存在を確認します。
関数を呼び出すことで、複数のファイルを簡単にチェックできます。
よくある質問
まとめ
この記事では、Bashのif文の基本的な使い方から、条件式の詳細、実行コマンドの切り替え、実践的な例、応用例まで幅広く解説しました。
これにより、条件に応じた処理を柔軟に行うための方法を学ぶことができました。
今後は、実際のスクリプト作成において、これらの知識を活用し、より効率的なプログラミングを目指してみてください。