[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

数値の比較

数値の比較には、以下の演算子を使用します。

スクロールできます
演算子説明
-eq2つの数値が等しいか
-ne2つの数値が異なるか
-lt左側の数値が小さいか
-le左側の数値が小さいかまたは等しいか
-gt左側の数値が大きいか
-ge左側の数値が大きいかまたは等しいか
num1=10
num2=20
if [ "$num1" -lt "$num2" ]; then
    echo "$num1は$num2より小さいです。"
fi

論理演算子の使い方(AND, OR)

条件式を組み合わせるために、論理演算子を使用します。

スクロールできます
演算子説明
-aAND演算子。両方の条件が真である場合に真。
-oOR演算子。いずれかの条件が真である場合に真。
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文では、条件に応じて異なる処理を行うために、elseelifを使用することができます。

これにより、より複雑な条件分岐を実現できます。

以下では、elseelifの使い方について詳しく解説します。

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を組み合わせた複雑な条件分岐

elseelifを組み合わせることで、さらに複雑な条件分岐を実現できます。

以下は、スコアに基づいて評価を行う例です。

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

このように、elseelifを使うことで、条件に応じた柔軟な処理を実現することができます。

比較演算子の種類と使い方

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文をさまざまな場面で活用する方法を学ぶことができます。

これらのテクニックを使って、より複雑なスクリプトを作成してみてください。

よくある質問

if文でエラーが出るのはなぜ?

if文でエラーが発生する主な原因はいくつかあります。

以下の点を確認してください。

  • 条件式の書き方: 条件式は必ず角括弧[]で囲む必要があります。

例えば、if [ "$var" -eq 10 ]; thenのように書く必要があります。

  • スペースの有無: 角括弧の前後にはスペースを入れる必要があります。

[ "$var" -eq 10 ]のように、スペースを忘れないようにしましょう。

  • シェルの種類: Bash以外のシェル(shやdashなど)を使用している場合、構文が異なることがあります。

Bashで実行することを確認してください。

文字列比較がうまくいかないのはなぜ?

文字列比較がうまくいかない場合、以下の点を確認してください。

  • 演算子の使用: 文字列の比較には=!=を使用します。

数値の比較演算子(-eq、-neなど)を使うと、エラーが発生します。

  • 引用符の使用: 文字列を比較する際は、変数を引用符で囲むことが重要です。

if [ "$str1" = "$str2" ]; thenのように書くことで、空の文字列やスペースを含む場合でも正しく比較できます。

  • 大文字小文字の違い: Bashでは大文字と小文字が区別されるため、意図しない結果になることがあります。

必要に応じて、trコマンドを使って大文字小文字を統一することができます。

複数の条件を使うときの注意点は?

複数の条件を使う際には、以下の点に注意してください。

  • 論理演算子の使用: AND条件には-a、OR条件には-oを使用しますが、[[ ]]を使うことで、&&||を使った方が可読性が高くなります。

例えば、if [[ "$a" -gt 10 && "$b" -lt 20 ]]; thenのように書くと良いでしょう。

  • 括弧の使用: 複雑な条件を組み合わせる場合、条件をグループ化するために括弧()を使用することが重要です。

Bashでは、\( \)を使って条件をグループ化します。

  • 条件の優先順位: 複数の条件を組み合わせる際は、条件の優先順位に注意が必要です。

意図した通りに評価されるように、括弧を使って明示的に優先順位を指定しましょう。

これらのポイントを押さえることで、Bashのif文をより効果的に活用できるようになります。

まとめ

この記事では、Bashのif文の基本的な使い方から、条件式の詳細、応用例まで幅広く解説しました。

特に、if文を使った条件分岐の方法や、複数の条件を組み合わせるテクニックについて詳しく触れました。

これを機に、実際に自分のスクリプトにif文を取り入れて、より柔軟で効率的なプログラムを作成してみてください。

  • URLをコピーしました!
目次から探す