Bashスクリプト内のテスト条件の使用方法

このテストコマンドは、Linuxのコマンドラインで使用して、あるエレメントを別のエレメントと比較することができますが、論理とプログラムフローを制御する条件文の一部としてBASHシェルスクリプトでより一般的に使用されます

基本的な例

ターミナルウィンドウを開くだけで、これらのコマンドを試すことができます

テスト1 -eq 2 && echo "yes" || エコー "いいえ"

上記のコマンドは、次のように分解できます。

本質的に、コマンドは1対2を比較しており、エコー "yes"文が実行されて "yes"と表示され、一致しない場合 "no"と表示されます。

数値の比較

数値として解析する要素を比較する場合は、次の比較演算子を使用できます。

例:

テスト1 -eq 2 && echo "yes" || エコー "いいえ"

(1は2に等しくないため、画面に「いいえ」と表示されます)

テスト1 -ge 2 && echo "yes" || エコー "いいえ"

(1が2以上でないため、画面に「いいえ」と表示されます)

テスト1 -gt 2 && echo "yes" || エコー "いいえ"

(1が2より大きくないため、画面に「いいえ」と表示されます)

テスト1 -le 2 && echo "yes" || エコー "いいえ"

(1が2以下であるため、画面に「はい」と表示されます)

テスト1 -lt 2 && echo "yes" || エコー "いいえ"

(1が2以下であるため、画面に「はい」と表示されます)

テスト1 - 2 &&エコー "はい" || エコー "いいえ"

(1が2に等しくないため、画面に「はい」と表示されます)

テキストの比較

文字列として解析する要素を比較する場合は、次の比較演算子を使用できます。

例:

テスト "string1" = "string2" &&エコー "はい" || エコー "いいえ"

( "string1"は "string2"と等しくないため、画面に「いいえ」と表示されます)

テスト "string1"!= "string2" &&エコー "はい" || エコー "いいえ"

( "string1"は "string2"と等しくないため、画面に「yes」と表示されます)

テスト-n "string1" &&エコー "はい" || エコー "いいえ"

( "string1"の文字列長が0より大きいため、画面に "yes"と表示されます)

test -z "string1" && echo "yes" || エコー "いいえ"

( "string1"の文字列の長さが0より大きいため、画面に "no"が表示されます)

ファイルの比較

ファイルを比較する場合は、次の比較演算子を使用できます。

例:

test / path / to / file1 -n / path / to / file2 && echo "yes"

(file1がfile2より新しい場合は、 "yes"と表示されます)

test -e / path / to / file1 && echo "yes"

(file1が存在する場合、 "yes"という単語が表示されます)

テスト-O / path / to / file1 && echo "yes"

(あなたがfile1を所有している場合、 "yes"という単語が表示されます)

用語

複数の条件の比較

これまでのところすべてが1つのことを他のものと比較していましたが、2つの条件を比較したい場合はどうでしょうか。

たとえば、動物が4本の足を持ち、「ムー」に行くと、それはおそらく牛です。 単に4本の足をチェックしても、牛がいることは保証されませんが、確かにそれを確認する音を確認してください。

一度に両方の条件をテストするには、次のステートメントを使用します。

テスト4 -eq 4 -a "moo" = "moo" && echo "それは牛です" || エコー "それは牛ではない"

ここでの重要な部分は、-aを意味する-aです。

同じテストをよりよく一般的に実行する方法は次のとおりです。

テスト4 -eq 4 && test "moo" = "ムー" &&エコー "それは牛です" || エコー "それは牛ではない"

別のテストでは、2つのステートメントを比較し、いずれかが真であれば文字列を出力します。 たとえば、「file1.txt」という名前のファイルが存在するか、「file1.doc」というファイルが存在するかを確認するには、次のコマンドを使用します

テスト-e file1.txt -o -e file1.doc && echo "file1 exists" || エコー "file1は存在しません"

ここでの重要な部分は、またはを意味する-oです。

同じテストをよりよく一般的に実行する方法は次のとおりです。

テスト-e file1.txt || test -e file1.doc && echo "file1 exists" || エコー "file1は存在しません"

テストキーワードを削除する

比較を実行するのに実際には単語testを使用する必要はありません。 次のように、ステートメントを角括弧で囲みます。

[-e file1.txt] && echo "file1 exists" || エコー "file1は存在しません"

[と]は基本的にテストと同じ意味です。

これで、次のように複数の条件の比較を改善できます。

[4 -eq 4] && ["moo" = "moo"] && echo "それは牛です" || エコー "それは牛ではない"

[-e file1.txt] || [-e file1.doc] && echo "file1 exists" || エコー "file1は存在しません"

概要

ある変数の値を別の変数とプログラムフローをテストできるので、テストコマンドはスクリプトでより便利です。 標準のコマンドラインでは、ファイルを使用してファイルが存在するかどうかをテストできます。