[Linux] if文の使い方 – 条件に合わせて実行コマンドを切り替える

Linuxのシェルスクリプトでif文を使用すると、条件に応じて異なるコマンドを実行できます。

基本的な構文はif [ 条件 ]; then コマンド; fiです。

elseelifを使うことで、複数の条件に対応できます。

例えば、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.txtfile2.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関数を定義し、引数として渡されたファイルの存在を確認します。

関数を呼び出すことで、複数のファイルを簡単にチェックできます。

よくある質問

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

if文の条件式でエラーが出る主な原因は、以下のようなものがあります。

  • スペースの不足: [ と条件の間、条件と ] の間にスペースが必要です。

例えば、if[ -f "file.txt" ]; はエラーになります。

正しくは if [ -f "file.txt" ]; です。

  • 条件式の誤り: 使用しているオプションや演算子が正しくない場合、エラーが発生します。

例えば、数値比較で文字列を使用するとエラーになります。

  • ファイルやディレクトリの存在: 存在しないファイルやディレクトリを条件に指定すると、エラーが発生することがあります。

複数の条件を組み合わせる方法は?

複数の条件を組み合わせるには、論理演算子を使用します。

以下のように、&&(AND)や||(OR)を使って条件を組み合わせることができます。

  • AND条件: 両方の条件が真である場合に実行されます。
  if [ 条件1 ] && [ 条件2 ]; then
      # 両方の条件が真の場合の処理
  fi
  • OR条件: いずれかの条件が真である場合に実行されます。
  if [ 条件1 ] || [ 条件2 ]; then
      # いずれかの条件が真の場合の処理
  fi

これにより、複雑な条件分岐が可能になります。

コマンドの実行結果を条件に使う方法は?

コマンドの実行結果を条件に使うには、$?を利用します。

これは、直前に実行したコマンドの終了ステータスを取得するための変数です。

終了ステータスが0の場合は成功、それ以外は失敗を示します。

以下のように使用します。

コマンド
if [ $? -eq 0 ]; then
    echo "コマンドは成功しました。"
else
    echo "コマンドは失敗しました。"
fi

この方法を使うことで、コマンドの実行結果に基づいて処理を分岐させることができます。

まとめ

この記事では、Bashのif文の基本的な使い方から、条件式の詳細、実行コマンドの切り替え、実践的な例、応用例まで幅広く解説しました。

これにより、条件に応じた処理を柔軟に行うための方法を学ぶことができました。

今後は、実際のスクリプト作成において、これらの知識を活用し、より効率的なプログラミングを目指してみてください。

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