Linux – bashでのif文の書き方を初心者向けに解説
bashでのif文は、条件に応じて処理を分岐させるために使います。
基本的な構文は以下の通りです。
if [ 条件 ]; then
コマンド
fi
[ 条件 ]
の部分で条件を指定し、then
の後に条件が真の場合に実行するコマンドを記述します。
条件が偽の場合は何も実行されません。
else
を使うことで、条件が偽の場合の処理も追加できます。
if [ 条件 ]; then
コマンド
else
別のコマンド
fi
また、elif
を使うことで複数の条件をチェックすることも可能です。
bashのif文とは?
bashのif文は、条件に基づいて異なる処理を実行するための制御構文です。
プログラムの流れを制御するために非常に重要な要素であり、条件が真(true)である場合に特定のコマンドを実行し、偽(false)である場合には別のコマンドを実行することができます。
主な特徴
- 条件分岐: 条件に応じて異なる処理を行うことができる。
- 柔軟性: 複数の条件を組み合わせて、より複雑な判断が可能。
- エラーハンドリング: プログラムの実行中に発生するエラーに対処するために使用できる。
このように、bashのif文はスクリプトを書く上で非常に重要な役割を果たします。
次のセクションでは、if文の基本構文について詳しく見ていきます。
if文の基本構文
bashのif文は、以下の基本構文で記述されます。
if 条件式; then
コマンド1
コマンド2
...
fi
構文の説明
- if: 条件分岐の開始を示します。
- 条件式: 真偽値を返す式を記述します。
例えば、ファイルの存在確認や数値の比較などが含まれます。
- then: 条件式が真である場合に実行されるコマンドの前に記述します。
- コマンド: 条件が真の場合に実行される処理を記述します。
- fi: if文の終了を示します。
以下は、ファイルが存在するかどうかを確認するif文の例です。
if [ -e "sample.txt" ]; then
echo "ファイルは存在します。"
fi
このコードを実行すると、sample.txt
というファイルが存在する場合に「ファイルは存在します。」と表示されます。
ファイルは存在します。
このように、基本的なif文の構文を理解することで、条件に応じた処理を簡単に実装できるようになります。
次のセクションでは、条件式の書き方について詳しく見ていきます。
条件式の書き方
bashのif文における条件式は、さまざまな形式で記述できます。
条件式は、特定の条件が真(true)か偽(false)かを判断するために使用されます。
以下に、一般的な条件式の書き方を紹介します。
1. ファイルの存在確認
ファイルが存在するかどうかを確認するには、-e
オプションを使用します。
if [ -e "ファイル名" ]; then
echo "ファイルは存在します。"
fi
2. 数値の比較
数値を比較する場合は、以下の演算子を使用します。
演算子 | 説明 |
---|---|
-eq | 等しい(equal) |
-ne | 等しくない(not equal) |
-lt | より小さい(less than) |
-le | 以下(less than or equal) |
-gt | より大きい(greater than) |
-ge | 以上(greater than or equal) |
num=10
if [ $num -gt 5 ]; then
echo "numは5より大きいです。"
fi
numは5より大きいです。
3. 文字列の比較
文字列を比較する場合は、以下の演算子を使用します。
演算子 | 説明 |
---|---|
= | 等しい |
!= | 等しくない |
-z | 空である(zero length) |
-n | 空でない(non-zero length) |
str="こんにちは"
if [ "$str" = "こんにちは" ]; then
echo "文字列は一致します。"
fi
文字列は一致します。
4. 複数条件の組み合わせ
複数の条件を組み合わせる場合は、&&
(AND)や||
(OR)を使用します。
if [ -e "sample.txt" ] && [ -r "sample.txt" ]; then
echo "ファイルは存在し、読み取り可能です。"
fi
ファイルは存在し、読み取り可能です。
このように、条件式の書き方を理解することで、さまざまな条件に基づいた処理を実装できるようになります。
次のセクションでは、elseとelifを使った条件分岐について詳しく見ていきます。
elseとelifを使った条件分岐
bashのif文では、else
やelif
を使用することで、より複雑な条件分岐を実現できます。
これにより、複数の条件を評価し、それぞれに応じた処理を行うことが可能になります。
1. elseの使い方
else
は、if文の条件が偽(false)である場合に実行される処理を記述するために使用します。
num=3
if [ $num -gt 5 ]; then
echo "numは5より大きいです。"
else
echo "numは5以下です。"
fi
numは5以下です。
この例では、num
が5より大きい場合には「numは5より大きいです。」と表示され、そうでない場合には「numは5以下です。」と表示されます。
2. elifの使い方
elif
は、最初のif文の条件が偽である場合に、別の条件を評価するために使用します。
これにより、複数の条件を連続して評価できます。
num=5
if [ $num -gt 5 ]; then
echo "numは5より大きいです。"
elif [ $num -eq 5 ]; then
echo "numは5です。"
else
echo "numは5より小さいです。"
fi
numは5です。
この例では、num
が5より大きい場合、5の場合、5より小さい場合のそれぞれに応じたメッセージが表示されます。
3. 複数のelifを使用する
elif
を複数回使用することで、さらに多くの条件を評価することができます。
num=8
if [ $num -gt 10 ]; then
echo "numは10より大きいです。"
elif [ $num -gt 5 ]; then
echo "numは5より大きいですが、10以下です。"
else
echo "numは5以下です。"
fi
numは5より大きいですが、10以下です。
このように、else
とelif
を使うことで、条件に応じた柔軟な処理を実装することができます。
次のセクションでは、複雑な条件式の書き方について詳しく見ていきます。
複雑な条件式の書き方
bashのif文では、複雑な条件式を使用することで、より詳細な条件判断が可能になります。
複数の条件を組み合わせたり、論理演算子を使用することで、柔軟な条件分岐を実現できます。
1. 論理演算子の使用
複数の条件を組み合わせるために、以下の論理演算子を使用します。
演算子 | 説明 |
---|---|
&& | 両方の条件が真である場合(AND) |
|| | いずれかの条件が真である場合(OR) |
例: AND条件
num=7
if [ $num -gt 5 ] && [ $num -lt 10 ]; then
echo "numは5より大きく、10より小さいです。"
fi
numは5より大きく、10より小さいです。
この例では、num
が5より大きく、かつ10より小さい場合にメッセージが表示されます。
例: OR条件
num=3
if [ $num -lt 5 ] || [ $num -gt 10 ]; then
echo "numは5未満または10より大きいです。"
fi
numは5未満または10より大きいです。
この例では、num
が5未満または10より大きい場合にメッセージが表示されます。
2. 条件式のグループ化
条件式をグループ化することで、より複雑な条件を作成できます。
グループ化には、(
と )
を使用します。
num=12
if [ $num -lt 10 ] || { [ $num -ge 10 ] && [ $num -lt 15 ]; }; then
echo "numは10未満または10以上15未満です。"
else
echo "numは15以上です。"
fi
numは10以上15未満です。
この例では、num
が10未満または10以上15未満の場合にメッセージが表示されます。
3. 文字列と数値の条件を組み合わせる
文字列と数値の条件を組み合わせることも可能です。
str="テスト"
num=5
if [ "$str" = "テスト" ] && [ $num -lt 10 ]; then
echo "文字列は一致し、numは10未満です。"
fi
文字列は一致し、numは10未満です。
このように、複雑な条件式を使用することで、さまざまな条件に基づいた処理を実装することができます。
次のセクションでは、実践的なif文の例について詳しく見ていきます。
実践的なif文の例
ここでは、実際のシナリオで役立つif文の例をいくつか紹介します。
これらの例を通じて、if文の使い方を具体的に理解し、実践に役立てることができます。
1. ユーザー入力の検証
ユーザーからの入力を検証し、特定の条件に基づいてメッセージを表示する例です。
echo "数字を入力してください:"
read userInput
if [[ $userInput =~ ^[0-9]+$ ]]; then
echo "入力されたのは数字です。"
else
echo "入力されたのは数字ではありません。"
fi
数字を入力してください:
5
入力されたのは数字です。
この例では、ユーザーが入力した値が数字であるかどうかを確認し、結果に応じたメッセージを表示します。
2. ファイルのバックアップ
指定したファイルが存在する場合にバックアップを作成するスクリプトの例です。
fileName="important.txt"
backupFileName="${fileName}.bak"
if [ -e "$fileName" ]; then
cp "$fileName" "$backupFileName"
echo "バックアップが作成されました: $backupFileName"
else
echo "ファイルが存在しません: $fileName"
fi
バックアップが作成されました: important.txt.bak
この例では、important.txt
というファイルが存在する場合に、そのバックアップを作成します。
3. サーバーの稼働状況のチェック
特定のプロセスが実行中かどうかを確認し、結果に応じてメッセージを表示する例です。
processName="nginx"
if pgrep "$processName" > /dev/null; then
echo "$processNameは実行中です。"
else
echo "$processNameは実行されていません。"
fi
nginxは実行中です。
この例では、nginx
というプロセスが実行中かどうかを確認し、実行中であればその旨を表示します。
4. 環境変数の確認
特定の環境変数が設定されているかどうかを確認する例です。
if [ -z "$MY_ENV_VAR" ]; then
echo "MY_ENV_VARは設定されていません。"
else
echo "MY_ENV_VARの値: $MY_ENV_VAR"
fi
MY_ENV_VARは設定されていません。
この例では、MY_ENV_VAR
という環境変数が設定されていない場合に、その旨を表示します。
これらの実践的な例を通じて、if文の使い方を具体的に理解し、さまざまなシナリオで活用できるようになります。
次のセクションでは、エラーハンドリングとif文について詳しく見ていきます。
エラーハンドリングとif文
bashスクリプトにおいて、エラーハンドリングは非常に重要です。
if文を使用することで、エラーが発生した場合に適切な処理を行うことができます。
ここでは、エラーハンドリングの基本的な考え方と、if文を使った具体的な例を紹介します。
1. コマンドの実行結果を確認する
bashでは、コマンドの実行結果は終了ステータス(exit status)で確認できます。
終了ステータスが0の場合は成功、0以外の場合はエラーを示します。
これを利用して、if文でエラーハンドリングを行います。
cp source.txt destination.txt
if [ $? -ne 0 ]; then
echo "ファイルのコピーに失敗しました。"
else
echo "ファイルが正常にコピーされました。"
fi
ファイルが正常にコピーされました。
この例では、cp
コマンドの実行結果を確認し、失敗した場合にはエラーメッセージを表示します。
2. 条件付きでコマンドを実行する
if文を使って、特定の条件が満たされた場合にのみコマンドを実行することができます。
これにより、エラーを未然に防ぐことができます。
fileName="important.txt"
if [ -e "$fileName" ]; then
rm "$fileName"
echo "$fileNameを削除しました。"
else
echo "$fileNameは存在しません。削除できません。"
fi
important.txtは存在しません。削除できません。
この例では、削除しようとするファイルが存在するかどうかを確認し、存在しない場合には削除処理を行わないようにしています。
3. 複数のエラー処理を行う
複数の条件を評価し、それぞれに対して異なるエラーハンドリングを行うことも可能です。
fileName="data.txt"
if [ ! -e "$fileName" ]; then
echo "$fileNameが見つかりません。"
elif [ ! -r "$fileName" ]; then
echo "$fileNameは読み取り不可です。"
else
echo "$fileNameを読み込みます。"
cat "$fileName"
fi
data.txtが見つかりません。
この例では、ファイルが存在しない場合や読み取り不可の場合に、それぞれ異なるエラーメッセージを表示します。
4. エラーログの記録
エラーが発生した場合に、エラーログをファイルに記録することも重要です。
これにより、後で問題を分析することができます。
command="some_command"
if ! $command; then
echo "エラー: $commandが失敗しました。" >> error.log
echo "エラーが発生しました。詳細はerror.logを確認してください。"
fi
エラーが発生しました。詳細はerror.logを確認してください。
この例では、コマンドが失敗した場合にエラーメッセージをerror.log
に記録します。
エラーハンドリングを適切に行うことで、スクリプトの信頼性を向上させ、予期しないエラーに対処することができます。
次のセクションでは、よくある質問について見ていきます。
まとめ
この記事では、bashのif文の基本から応用までを振り返り、条件式の書き方やエラーハンドリングの重要性について詳しく解説しました。
if文を使うことで、スクリプトの中で条件に応じた柔軟な処理を実現できるため、プログラムの効率性が向上します。
これを機に、実際のスクリプト作成にif文を積極的に活用し、より効果的なシェルスクリプトを作成してみてください。