Bash の if 文を複数条件で使用する方法

ShellBeginner
オンラインで実践に進む

はじめに

このチュートリアルでは、シェルスクリプトのスキルを向上させるために、Bash の if 文を複数の条件で使用する方法を紹介します。論理演算子を効果的に組み合わせる方法を学び、さまざまな基準に基づいて賢明な判断を下すスクリプトを構築できるようになります。この実験(Lab)の終わりには、日常的なタスクのための多用途な自動化ツールを作成できるようになります。

Bash の if 文の基本を理解する

まず、基本から始めましょう。Bash では、if 文は、条件が真か偽かに基づいてスクリプトが何をするかを決定するのに役立ちます。これは、Ubuntu システムでタスクを自動化する必要がある場合に特に役立ちます。

デフォルトディレクトリ /home/labex/project でターミナルを開きます。すべてのスクリプトをここに記述します。まず、次のように入力して、basic_if.sh という名前のシンプルなスクリプトファイルを作成します。

touch basic_if.sh

ファイルが存在するかどうかを確認するために、次のコードを追加します。

#!/bin/bash
if [[ -f "testfile.txt" ]]; then
  echo "The file exists."
else
  echo "The file does not exist."
fi

このスクリプトは、[[ -f "testfile.txt" ]] を使用して、現在のディレクトリに testfile.txt が存在するかどうかをテストします。echo コマンドは、結果に応じてメッセージを表示します。

スクリプトを実行可能にするには、次のようにします。

chmod +x basic_if.sh

次に、実行します。

./basic_if.sh

まだ testfile.txt が存在しないため、「The file does not exist.」と表示されます。他の結果を確認するために、ファイルを作成しましょう。

touch testfile.txt

スクリプトをもう一度実行します。

./basic_if.sh

basic_if.sh

これで、「The file exists.」が出力されるはずです。このステップでは、ifthenelse、および fi の基本的な構造を紹介します。二重ブラケット [[ ]] は、最新の Bash 機能であり、単一ブラケットよりも条件テストをより信頼性の高いものにします。

AND (&&) を使用して複数の条件を追加する

次に、一度に複数の条件をチェックすることで、if 文をよりスマートにしましょう。&& (AND) 演算子を使用します。これは、then ブロックを実行するために、すべての条件が真である必要があります。

basic_if.sh をもう一度開き、その内容を次の更新されたスクリプトに置き換えます。

#!/bin/bash
if [[ -f "testfile.txt" ]] && [[ -r "testfile.txt" ]]; then
  echo "The file exists and is readable."
else
  echo "The file is either missing or not readable."
fi

このスクリプトは、2 つのことをチェックします。testfile.txt が存在するかどうか (-f)、および読み取り可能かどうか (-r) です。最初のメッセージが表示されるには、両方が真である必要があります。

スクリプトを実行します。

./basic_if.sh

ステップ 1 で testfile.txt を作成し、デフォルトで読み取り可能 (labex が所有しているため) であるため、「The file exists and is readable.」と表示されます。&& がどのように機能するかを理解するために、反対のシナリオをテストしてみましょう。ファイルのパーミッションを変更して、読み取り不可にします。

chmod u-r testfile.txt

スクリプトをもう一度実行します。

./basic_if.sh

これで、2 番目の条件 (-r) が失敗したため、「The file is either missing or not readable」が出力されます。次のステップのために、読み取り可能性を復元します。

chmod u+r testfile.txt

&& 演算子は、すべての条件が合格することを確認します。これは、複数の基準が重要となる状況に最適です。

柔軟な条件に OR (||) を使用する

次に、|| (OR) 演算子を調べます。これは、少なくとも 1 つ の条件が真の場合に then ブロックを実行できます。これは、チェックに柔軟性が必要な場合に役立ちます。

basic_if.sh をもう一度開きます。このコードで更新します。

#!/bin/bash
if [[ -f "testfile.txt" ]] || [[ -f "backup.txt" ]]; then
  echo "At least one file exists."
else
  echo "Neither file exists."
fi

このスクリプトは、testfile.txt または backup.txt のいずれかが存在するかどうかをチェックします。testfile.txt は既にディレクトリにあるため、実行します。

./basic_if.sh

「At least one file exists.」と表示されます。次に、|| ロジックをテストするために、testfile.txt を削除します。

rm testfile.txt

スクリプトをもう一度実行します。

./basic_if.sh

どちらのファイルも存在しないため、「Neither file exists」が出力されます。OR 条件が成功することを確認するために、backup.txt を作成します。

touch backup.txt
./basic_if.sh

これで、再び「At least one file exists」と表示されます。|| 演算子は、いずれかの条件が真であれば十分な場合に最適です。

AND および OR 演算子の組み合わせ

より複雑なロジックのために、&&|| を組み合わせてみましょう。ファイルが存在し、特定の基準を満たしているかどうかをチェックし、フォールバック条件も設定します。

basic_if.sh をもう一度開きます。このコードで更新します。

#!/bin/bash
if [[ -f "testfile.txt" ]] && [[ -r "testfile.txt" ]] || [[ -f "backup.txt" ]]; then
  echo "Either testfile.txt is readable or backup.txt exists."
else
  echo "No suitable file found."
fi

このスクリプトは、testfile.txt が存在し、かつ 読み取り可能であるか、または backup.txt が存在するかどうかをチェックします。testfile.txt を再作成します。

touch testfile.txt

スクリプトを実行します。

./basic_if.sh

testfile.txt が両方の条件を満たしているため、「Either testfile.txt is readable or backup.txt exists」が出力されます。testfile.txt を削除し、backup.txt を保持します。

rm testfile.txt
./basic_if.sh

backup.txt|| 条件を満たしているため、同じメッセージが表示されます。backup.txt も削除します。

rm backup.txt
./basic_if.sh

これで、「No suitable file found.」と表示されます。このステップでは、微妙な判断のために演算子をどのように組み合わせるかを示しています。

実用的なタスクへの条件の適用

最後に、これまでに学んだことを実際のシナリオ、つまりユーザー入力を検証する際に使用してみましょう。数値が範囲内にあるかどうかをチェックするスクリプトを作成します。

number_check.sh という新しいスクリプトを作成します。

touch number_check.sh
chmod +x number_check.sh

このコードを追加します。

#!/bin/bash
read -p "Enter a number between 1 and 10: " number
if [[ "$number" -ge 1 ]] && [[ "$number" -le 10 ]]; then
  echo "Valid number: $number"
else
  echo "Invalid number. Please enter a value between 1 and 10."
fi

このスクリプトは、数値の入力を促し、&& を使用して、その数値が 1 から 10 の間(両端を含む)であることを確認します。実行します。

./number_check.sh

5 と入力して Enter キーを押します。「Valid number: 5」と表示されます。もう一度実行し、15 と入力します。「Invalid number. Please enter a value between 1 and 10.」と応答します。これは、ユーザー入力を処理し、スクリプトが有効なデータのみで続行されるようにするための実用的な方法です。

まとめ

この実験では、&& および || 演算子を使用して、複数の条件を持つ Bash if 文を習得しました。ファイルのプロパティのチェックからユーザー入力の検証まで、複雑な基準に基づいて判断を行うスクリプトを作成しました。これらのスキルにより、Ubuntu システム上のさまざまなニーズに合わせて、信頼性の高い自動化ツールを作成できます。