このテストコマンドは、Linuxのコマンドラインで使用して、あるエレメントを別のエレメントと比較することができますが、論理とプログラムフローを制御する条件文の一部としてBASHシェルスクリプトでより一般的に使用されます 。
基本的な例
ターミナルウィンドウを開くだけで、これらのコマンドを試すことができます 。
テスト1 -eq 2 && echo "yes" || エコー "いいえ"
上記のコマンドは、次のように分解できます。
- テスト - これはあなたが比較を実行しようとしていることを意味します
- 1 - 比較する最初の要素
- -eq(あなたはどのように比較していますか?この場合、ある数字が別の数字と等しいかどうかをテストしています)
- 2 - 最初の要素を再度比較する要素
- && - 結果が真であれば次の文を実行する
- echo "yes" - 比較がtrueを返す場合に実行するコマンド
- || - 結果がfalseの場合は、次の文を実行します。
- echo "no" - 比較がfalseを返す場合に実行するコマンド
本質的に、コマンドは1対2を比較しており、エコー "yes"文が実行されて "yes"と表示され、一致しない場合 "no"と表示されます。
数値の比較
数値として解析する要素を比較する場合は、次の比較演算子を使用できます。
- -eq - 値1と等しい値2
- -ge - 値1は値2以上
- -gt - 値1が値2より大きい
- -le - 値1は値2以下
- -lt - 値1が値2より小さい
- -ne - 値1が値2と等しくない
例:
テスト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に等しくないため、画面に「はい」と表示されます)
テキストの比較
文字列として解析する要素を比較する場合は、次の比較演算子を使用できます。
- = - 文字列1は文字列2と一致します
- != - 文字列1と文字列2が異なる
- -n - 文字列の長さが0より大きい
- -z - 文字列の長さ0
例:
テスト "string1" = "string2" &&エコー "はい" || エコー "いいえ"
( "string1"は "string2"と等しくないため、画面に「いいえ」と表示されます)
テスト "string1"!= "string2" &&エコー "はい" || エコー "いいえ"
( "string1"は "string2"と等しくないため、画面に「yes」と表示されます)
テスト-n "string1" &&エコー "はい" || エコー "いいえ"
( "string1"の文字列長が0より大きいため、画面に "yes"と表示されます)
test -z "string1" && echo "yes" || エコー "いいえ"
( "string1"の文字列の長さが0より大きいため、画面に "no"が表示されます)
ファイルの比較
ファイルを比較する場合は、次の比較演算子を使用できます。
- -ef - ファイルには同じデバイス番号とiノード番号が含まれていますか(同じファイルですか)
- -nt - 最初のファイルが2番目のファイルより新しいかどうか
- -ot - 最初のファイルが2番目のファイルより古いかどうか
- -b - ファイルが存在し、ブロックスペシャルです
- -c - ファイルが存在し、文字特殊文字です。
- -d - ファイルが存在し、ディレクトリです。
- -e - ファイルが存在する
- -f - ファイルが存在し、通常のファイルです。
- -g - ファイルが存在し、指定されたグループ番号を持つ
- -G - ファイルが存在し、ユーザーのグループによって所有者
- -h - ファイルが存在し、シンボリックリンクです
- -k - ファイルが存在し、そのスティッキービットが設定されている
- -L - -hと同じです。
- -O - あなたが所有者であるファイルが存在します
- -p - ファイルが存在し、名前付きパイプです。
- -r - ファイルが存在し、読み取り可能です。
- -s - ファイルが存在し、サイズが0より大きい
- -S - ファイルが存在し、ソケットです。
- -t - ファイル記述子が端末上で開かれている
- -u - ファイルが存在し、set-user-idビットが設定されている
- -w - ファイルが存在し、書き込み可能です。
- -x - ファイルが存在し、実行可能です。
例:
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は存在しません"
概要
ある変数の値を別の変数とプログラムフローをテストできるので、テストコマンドはスクリプトでより便利です。 標準のコマンドラインでは、ファイルを使用してファイルが存在するかどうかをテストできます。