[Linux] bashでのif文の書き方を初心者向けに解説
Bashでのif文は、条件に応じて処理を分岐させるために使います。
基本的な構文は以下の通りです。
if [ 条件 ]; then
コマンド
fi
if
の後に条件を[ 条件 ]
で囲み、条件が真の場合にthen
の後のコマンドが実行されます。
条件が偽の場合は何も実行されません。
fi
でif文を終了します。
例えば、if [ -f ファイル名 ]
は、指定したファイルが存在するかどうかを確認します。
条件が偽の場合に別の処理を行いたい場合は、else
を使います。
- Bashのif文の基本構文と使い方
- 条件式の詳細な書き方
- 複雑な条件分岐の実装方法
- 実践的なスクリプトの例
- 応用的なif文の活用方法
if文の基本構文
Bashにおけるif文は、条件に基づいて異なる処理を実行するための基本的な制御構文です。
if文を使うことで、プログラムの流れを柔軟に制御することができます。
以下では、if文の基本的な書き方や構成要素について詳しく解説します。
if文の基本的な書き方
if文の基本的な構文は以下の通りです。
if [ 条件式 ]; then
# 条件が真のときに実行されるコマンド
fi
この構文では、条件式が真である場合に、thenの後に続くコマンドが実行されます。
条件式は、角括弧[]
で囲む必要があります。
条件式の書き方
条件式は、ファイルの存在確認や数値の比較、文字列の比較など、さまざまな条件を指定することができます。
以下は、よく使われる条件式の例です。
条件の種類 | 書き方 | 説明 |
---|---|---|
ファイル存在確認 | -e ファイル名 | 指定したファイルが存在するか |
文字列比較 | "$str1" = "$str2" | 2つの文字列が等しいか |
数値比較 | "$num1" -eq "$num2" | 2つの数値が等しいか |
thenとfiの役割
- then: if文の条件が真である場合に実行されるコマンドの開始を示します。
thenの後には、実行したいコマンドを記述します。
- fi: if文の終了を示します。
fiはifの逆さまの綴りで、if文のブロックを閉じる役割を果たします。
シェルスクリプトでのif文の使い方
シェルスクリプト内でif文を使用することで、さまざまな条件に基づいた処理を実行できます。
以下は、シェルスクリプトでのif文の例です。
#!/bin/bash
# ファイルの存在を確認
if [ -e "sample.txt" ]; then
echo "sample.txtは存在します。"
else
echo "sample.txtは存在しません。"
fi
このスクリプトでは、sample.txt
というファイルが存在するかどうかを確認し、存在する場合はその旨を表示します。
存在しない場合は、別のメッセージを表示します。
sample.txtは存在します。
条件式の詳細
Bashのif文における条件式は、プログラムの流れを制御するための重要な要素です。
ここでは、さまざまな条件式の詳細について解説します。
ファイルの存在確認
ファイルの存在を確認するためには、以下のような条件式を使用します。
条件式 | 説明 |
---|---|
-e ファイル名 | 指定したファイルが存在するか |
-f ファイル名 | 指定したファイルが通常のファイルか |
-d ディレクトリ名 | 指定したディレクトリが存在するか |
-r ファイル名 | 指定したファイルが読み取り可能か |
-w ファイル名 | 指定したファイルが書き込み可能か |
-x ファイル名 | 指定したファイルが実行可能か |
if [ -e "example.txt" ]; then
echo "example.txtは存在します。"
fi
文字列の比較
文字列の比較には、以下の演算子を使用します。
演算子 | 説明 |
---|---|
= | 2つの文字列が等しいか |
!= | 2つの文字列が異なるか |
< | 左側の文字列が小さいか |
> | 左側の文字列が大きいか |
str1="Hello"
str2="World"
if [ "$str1" = "$str2" ]; then
echo "文字列は等しいです。"
else
echo "文字列は異なります。"
fi
数値の比較
数値の比較には、以下の演算子を使用します。
演算子 | 説明 |
---|---|
-eq | 2つの数値が等しいか |
-ne | 2つの数値が異なるか |
-lt | 左側の数値が小さいか |
-le | 左側の数値が小さいかまたは等しいか |
-gt | 左側の数値が大きいか |
-ge | 左側の数値が大きいかまたは等しいか |
num1=10
num2=20
if [ "$num1" -lt "$num2" ]; then
echo "$num1は$num2より小さいです。"
fi
論理演算子の使い方(AND, OR)
条件式を組み合わせるために、論理演算子を使用します。
演算子 | 説明 |
---|---|
-a | AND演算子。両方の条件が真である場合に真。 |
-o | OR演算子。いずれかの条件が真である場合に真。 |
num=15
if [ "$num" -gt 10 -a "$num" -lt 20 ]; then
echo "$numは10より大きく、20より小さいです。"
fi
括弧の使い方と優先順位
条件式の中で複雑な条件を扱う場合、括弧を使って条件の優先順位を明確にすることが重要です。
Bashでは、[[ ]]
を使うことで、より強力な条件式を作成できます。
num=25
if [[ "$num" -gt 20 && "$num" -lt 30 ]]; then
echo "$numは20より大きく、30より小さいです。"
fi
このように、括弧を使うことで条件のグループ化が可能になり、可読性が向上します。
elseとelifを使った条件分岐
Bashのif文では、条件に応じて異なる処理を行うために、else
やelif
を使用することができます。
これにより、より複雑な条件分岐を実現できます。
以下では、else
とelif
の使い方について詳しく解説します。
elseの使い方
else
は、if文の条件が偽である場合に実行されるコマンドを指定するために使用します。
基本的な構文は以下の通りです。
if [ 条件式 ]; then
# 条件が真のときに実行されるコマンド
else
# 条件が偽のときに実行されるコマンド
fi
num=5
if [ "$num" -gt 10 ]; then
echo "$numは10より大きいです。"
else
echo "$numは10以下です。"
fi
5は10以下です。
elifの使い方
elif
は、最初のif文の条件が偽である場合に、別の条件を指定するために使用します。
複数の条件を連続して評価することができます。
基本的な構文は以下の通りです。
if [ 条件式1 ]; then
# 条件1が真のときに実行されるコマンド
elif [ 条件式2 ]; then
# 条件2が真のときに実行されるコマンド
else
# どちらの条件も偽のときに実行されるコマンド
fi
num=15
if [ "$num" -lt 10 ]; then
echo "$numは10未満です。"
elif [ "$num" -lt 20 ]; then
echo "$numは10以上20未満です。"
else
echo "$numは20以上です。"
fi
15は10以上20未満です。
複数の条件を使った分岐の例
複数の条件を使った分岐を行うことで、より細かい制御が可能になります。
以下は、年齢に基づいて異なるメッセージを表示する例です。
age=25
if [ "$age" -lt 13 ]; then
echo "子供です。"
elif [ "$age" -lt 20 ]; then
echo "ティーンエイジャーです。"
elif [ "$age" -lt 65 ]; then
echo "大人です。"
else
echo "高齢者です。"
fi
大人です。
elseとelifを組み合わせた複雑な条件分岐
else
とelif
を組み合わせることで、さらに複雑な条件分岐を実現できます。
以下は、スコアに基づいて評価を行う例です。
score=85
if [ "$score" -ge 90 ]; then
echo "評価: A"
elif [ "$score" -ge 80 ]; then
echo "評価: B"
elif [ "$score" -ge 70 ]; then
echo "評価: C"
elif [ "$score" -ge 60 ]; then
echo "評価: D"
else
echo "評価: F"
fi
評価: B
このように、else
とelif
を使うことで、条件に応じた柔軟な処理を実現することができます。
比較演算子の種類と使い方
Bashのif文では、条件を評価するためにさまざまな比較演算子を使用します。
ここでは、数値の比較、文字列の比較、ファイルの属性を確認するための演算子について詳しく解説します。
数値の比較演算子(-eq, -ne, -lt, -le, -gt, -ge)
数値の比較を行うための演算子は以下の通りです。
演算子 | 説明 | 使用例 |
---|---|---|
-eq | 等しい | if [ "$num1" -eq "$num2" ] |
-ne | 異なる | if [ "$num1" -ne "$num2" ] |
-lt | より小さい | if [ "$num1" -lt "$num2" ] |
-le | より小さいか等しい | if [ "$num1" -le "$num2" ] |
-gt | より大きい | if [ "$num1" -gt "$num2" ] |
-ge | より大きいか等しい | if [ "$num1" -ge "$num2" ] |
num1=10
num2=20
if [ "$num1" -lt "$num2" ]; then
echo "$num1は$num2より小さいです。"
fi
10は20より小さいです。
文字列の比較演算子(=, !=, <, >)
文字列の比較を行うための演算子は以下の通りです。
演算子 | 説明 | 使用例 |
---|---|---|
= | 等しい | if [ "$str1" = "$str2" ] |
!= | 異なる | if [ "$str1" != "$str2" ] |
< | 左側の文字列が小さい | if [[ "$str1" < "$str2" ]] |
> | 左側の文字列が大きい | if [[ "$str1" > "$str2" ]] |
str1="apple"
str2="banana"
if [ "$str1" != "$str2" ]; then
echo "$str1と$str2は異なります。"
fi
appleとbananaは異なります。
ファイルの属性を確認する演算子(-f, -d, -r, -w, -x)
ファイルの属性を確認するための演算子は以下の通りです。
演算子 | 説明 | 使用例 |
---|---|---|
-f | 通常のファイルか | if [ -f "file.txt" ] |
-d | ディレクトリか | if [ -d "directory" ] |
-r | 読み取り可能か | if [ -r "file.txt" ] |
-w | 書き込み可能か | if [ -w "file.txt" ] |
-x | 実行可能か | if [ -x "script.sh" ] |
if [ -d "my_directory" ]; then
echo "my_directoryは存在するディレクトリです。"
fi
my_directoryは存在するディレクトリです。
これらの比較演算子を使うことで、Bashスクリプト内でさまざまな条件を評価し、プログラムの流れを制御することができます。
論理演算子を使った複雑な条件
Bashのif文では、複数の条件を組み合わせて評価するために論理演算子を使用します。
これにより、より複雑な条件分岐が可能になります。
ここでは、AND演算子とOR演算子の使い方、複数の条件を組み合わせる方法、そして括弧を使った条件のグループ化について解説します。
AND演算子(-a)の使い方
AND演算子-a
は、両方の条件が真である場合に真となります。
以下のように使用します。
if [ 条件1 -a 条件2 ]; then
# 条件1と条件2が両方とも真のときに実行されるコマンド
fi
num=15
if [ "$num" -gt 10 -a "$num" -lt 20 ]; then
echo "$numは10より大きく、20より小さいです。"
fi
15は10より大きく、20より小さいです。
OR演算子(-o)の使い方
OR演算子-o
は、いずれかの条件が真である場合に真となります。
以下のように使用します。
if [ 条件1 -o 条件2 ]; then
# 条件1または条件2が真のときに実行されるコマンド
fi
num=5
if [ "$num" -lt 10 -o "$num" -gt 20 ]; then
echo "$numは10未満または20より大きいです。"
fi
5は10未満または20より大きいです。
複数の条件を組み合わせる方法
複数の条件を組み合わせることで、より複雑な条件を評価することができます。
AND演算子とOR演算子を組み合わせて使用することも可能です。
num=25
if [ "$num" -lt 10 -o \( "$num" -ge 10 -a "$num" -lt 20 \) ]; then
echo "$numは10未満または10以上20未満です。"
else
echo "$numは20以上です。"
fi
25は20以上です。
括弧を使った条件のグループ化
条件をグループ化するために、括弧を使用することが重要です。
Bashでは、条件式をグループ化するために\( \)
を使用します。
これにより、条件の優先順位を明確にすることができます。
num=30
if [ "$num" -lt 10 -o \( "$num" -ge 10 -a "$num" -lt 40 \) ]; then
echo "$numは10未満または10以上40未満です。"
else
echo "$numは40以上です。"
fi
30は10以上40未満です。
このように、論理演算子を使うことで、複雑な条件を簡潔に表現し、プログラムの流れを柔軟に制御することができます。
実践的なif文の例
Bashのif文を使った実践的なスクリプトの例をいくつか紹介します。
これらの例を通じて、if文の使い方をより深く理解できるでしょう。
ファイルが存在するか確認するスクリプト
このスクリプトでは、指定したファイルが存在するかどうかを確認し、結果を表示します。
#!/bin/bash
# 確認するファイル名
file_name="example.txt"
if [ -e "$file_name" ]; then
echo "$file_nameは存在します。"
else
echo "$file_nameは存在しません。"
fi
example.txtは存在します。
ユーザー入力に応じた処理を行うスクリプト
このスクリプトでは、ユーザーからの入力に基づいて異なるメッセージを表示します。
#!/bin/bash
echo "あなたの名前を入力してください:"
read name
if [ -z "$name" ]; then
echo "名前が入力されていません。"
else
echo "こんにちは、$nameさん!"
fi
あなたの名前を入力してください:
山田
こんにちは、山田さん!
数値の大小を比較するスクリプト
このスクリプトでは、2つの数値を比較し、どちらが大きいかを表示します。
#!/bin/bash
echo "1つ目の数値を入力してください:"
read num1
echo "2つ目の数値を入力してください:"
read num2
if [ "$num1" -gt "$num2" ]; then
echo "$num1は$num2より大きいです。"
elif [ "$num1" -lt "$num2" ]; then
echo "$num1は$num2より小さいです。"
else
echo "$num1と$num2は等しいです。"
fi
1つ目の数値を入力してください:
10
2つ目の数値を入力してください:
20
10は20より小さいです。
複数の条件を使ったスクリプト
このスクリプトでは、年齢に基づいて異なるメッセージを表示します。
複数の条件を使って、年齢層を分類します。
#!/bin/bash
echo "年齢を入力してください:"
read age
if [ "$age" -lt 13 ]; then
echo "あなたは子供です。"
elif [ "$age" -lt 20 ]; then
echo "あなたはティーンエイジャーです。"
elif [ "$age" -lt 65 ]; then
echo "あなたは大人です。"
else
echo "あなたは高齢者です。"
fi
年齢を入力してください:
30
あなたは大人です。
これらの実践的な例を通じて、Bashのif文を使った条件分岐の基本的な使い方を学ぶことができます。
これらのスクリプトを参考にして、自分のニーズに合わせたスクリプトを作成してみてください。
応用例
Bashのif文は、さまざまな場面で応用することができます。
ここでは、if文を使ったいくつかの応用例を紹介します。
if文を使ったループ処理との組み合わせ
if文をループ処理と組み合わせることで、条件に応じた繰り返し処理を実現できます。
以下は、1から10までの数値をチェックし、偶数か奇数かを表示する例です。
#!/bin/bash
for num in {1..10}; do
if [ $((num % 2)) -eq 0 ]; then
echo "$numは偶数です。"
else
echo "$numは奇数です。"
fi
done
1は奇数です。
2は偶数です。
3は奇数です。
4は偶数です。
5は奇数です。
6は偶数です。
7は奇数です。
8は偶数です。
9は奇数です。
10は偶数です。
関数内でのif文の使い方
関数内でもif文を使用することができます。
以下は、引数として渡された数値が正か負かを判定する関数の例です。
#!/bin/bash
check_number() {
if [ "$1" -gt 0 ]; then
echo "$1は正の数です。"
elif [ "$1" -lt 0 ]; then
echo "$1は負の数です。"
else
echo "$1はゼロです。"
fi
}
check_number 5
check_number -3
check_number 0
5は正の数です。
-3は負の数です。
0はゼロです。
複数のファイルを条件にした処理
複数のファイルの存在を確認し、それに応じた処理を行うことも可能です。
以下は、指定した2つのファイルが存在するかどうかを確認する例です。
#!/bin/bash
file1="file1.txt"
file2="file2.txt"
if [ -e "$file1" ] && [ -e "$file2" ]; then
echo "$file1と$file2は両方とも存在します。"
else
echo "どちらかのファイルが存在しません。"
fi
file1.txtとfile2.txtは両方とも存在します。
コマンドの実行結果を条件に使う方法
コマンドの実行結果を条件として使用することもできます。
以下は、ディレクトリの存在を確認する例です。
#!/bin/bash
directory="my_directory"
if [ -d "$directory" ]; then
echo "$directoryは存在するディレクトリです。"
else
echo "$directoryは存在しないか、ディレクトリではありません。"
fi
my_directoryは存在するディレクトリです。
ネストされたif文の使い方
if文をネストして使用することで、より複雑な条件分岐を実現できます。
以下は、年齢と性別に基づいてメッセージを表示する例です。
#!/bin/bash
echo "年齢を入力してください:"
read age
echo "性別を入力してください (M/F):"
read gender
if [ "$age" -lt 18 ]; then
echo "あなたは未成年です。"
else
if [ "$gender" = "M" ]; then
echo "あなたは成人男性です。"
else
echo "あなたは成人女性です。"
fi
fi
年齢を入力してください:
20
性別を入力してください (M/F):
F
あなたは成人女性です。
これらの応用例を通じて、Bashのif文をさまざまな場面で活用する方法を学ぶことができます。
これらのテクニックを使って、より複雑なスクリプトを作成してみてください。
よくある質問
まとめ
この記事では、Bashのif文の基本的な使い方から、条件式の詳細、応用例まで幅広く解説しました。
特に、if文を使った条件分岐の方法や、複数の条件を組み合わせるテクニックについて詳しく触れました。
これを機に、実際に自分のスクリプトにif文を取り入れて、より柔軟で効率的なプログラムを作成してみてください。