test - 条件をテストする

形式

test expression [ expression ]

説明

test は、 ファイル、ストリングおよび整数のさまざまなプロパティーを検査します。 エラー・メッセージ以外の出力は作成しませんが、終了状況としてテストの結果を戻します。

テスト・コマンドの 2 番目の形式: expression ] は、最初のものと同義です。 [[ ... ]] についての詳細は、ssh コマンドの説明の rewoco を参照してください。

以下に、認識されるオペランドをリストしています。

コマンド行は、ブール式です。最も単純な式は、ストリングが空でない (つまり、長さがゼロ以外) の場合に真となるストリングです。もっと複雑な式は、演算子とオペランドから構成され、それぞれが別の引数 (すなわち、ホワイト・スペースで囲まれている) です。演算子は、オペランドの数とタイプを暗黙に示します。file オペランドをとる演算子は、ファイルが存在しない場合、偽 (エラーなし) として評価されます。

以下に、認識されるオペランドをリストしています。

–Aa file
file が拡張アクセス ACL エントリーの場合、真。
–Ad file
file がディレクトリーのデフォルト ACL 付きのディレクトリーの場合、真。
–Af file
file がファイルのデフォルト ACL 付きのディレクトリーの場合、真。
–b file
file がブロック・スペシャル・ファイルの場合、真 (ブロック・スペシャル・ファイルはサポートされていません)。
–B file
file がバイナリー (非テキスト) としてタグ付けされている場合、真。
–c file
file が文字特殊ファイルの場合、真。
–d file
file がディレクトリーの場合、真。
–e file
file が存在する場合、真。
–Ea file
file が APF 拡張属性を持っている場合、真。
–Ep file
file がプログラム制御拡張属性を持っている場合、真。
–Es file
file が共用アドレス・スペース拡張属性を持っている場合、真。
–El file
file が共用ライブラリー拡張属性を持っている場合、真。
–f file
file が通常ファイルの場合、真。
–g file
file グループ ID 設定属性がオンの場合、真。
–h file
file がシンボリック・リンクの場合、真。
–k file
file の「スティッキー」ビットがオンの場合、真。
–L file
file がシンボリック・リンクの場合、真。
–Ma file
file がマルチレベル・セキュリティー seclabel を持っている場合、真。
–n string
string の長さがゼロより大きい場合、真。
–p file
file が FIFO (名前付きパイプ) の場合、真。
–r file
file が読み取り可能 (実効ユーザー/グループに対するセキュリティー製品での検査 に基づきます) な場合、真。
–s file
file のサイズがゼロ以外の場合、真。
–t fd
数値ファイル・ディスクリプター fd がオープンで、端末に関連している場合、真。
–T file
file がテキストとしてタグ付けされている場合、真。
–u file
file のユーザー ID 設定属性がオンの場合、真。
–w file
file が書き込み可能 (実効ユーザー/グループに対するセキュリティー製品での検査 に基づきます) な場合、真。
–x file
file が実行可能 (実効ユーザー/グループに対するセキュリティー製品での検査 に基づきます) な場合、真。
–z string
string の長さがゼロの場合、真。
string
string がヌル・ストリングでない場合、真。
string1 = string2
string1string2 が同一の場合、真。
string != string
string1string2 が同一でない場合、真。
number1 –eq number2
number1number2 が等しい場合、真。

シェル内では、どちらの数値も任意のシェル 算術式にすることができます。後続の 5 つの数値比較にも同じことが適用されます。number1number2 は 両方とも整数でなければなりません。

number1 –ge number2
number1number2 より大きいか、または等しい場合、真。
number1 –gt number2
number1number2 より大きい場合、真。
number1 –le number2
number1number2 より小さいか、または等しい場合、真。
number1 –lt number2
number1number2 より小さい場合、真。
number1 –ne number2
number1number2 と等しくない場合、真。
file1 –nt file2
file1file2 より新しい場合、真。
file1 –ot file2
file1file2 より古い場合、真。
file1 –ef file2
file1file2 と同じデバイスと i ノード番号を持っている場合、真。
file –CS codeset
file がコード・セットを指定してタグ付けされている場合、真。
file –Ml seclabel
ファイルがマルチレベル・セキュリティー・ラベル seclabel を持っている場合、真。ファイルが seclabel に一致するセキュリティー・ラベルを持っていない場合、偽。
expr1 –a expr2
論理 AND; expr1expr2 が両方とも真の場合、真。
expr1 –o expr2
論理 OR; expr1expr2 のどちらかが真の場合、真。
! expr
論理否定; expr が偽の場合、真。
( expr )
バインディング; expr が真の場合、真。

演算子の優先順位は降順で、単項演算子、比較演算子、論理 AND、論理 OR の順です。

テスト・コマンドの 2 番目の形式:
[ expression ]
は、最初のものと同義です。

使用上の注意

  1. test は、組み込みシェル・コマンドです。
  2. test は変数を比較できますが、変数がヌルの場合は、その式は test に有効ではありません。例えば、以下のとおりです。
    NULL=
    test $NULL = "so"
    は機能しません。この式は z/OS シェルによって
    test = "so"
    と拡張され、test に対して無効な式になるからです。これを避けるには、以下のように、何らかの値を両方のストリングの前に付加します。
    test x$NULL = x"so"
    変数展開を引用符で囲まないというのもよくある間違いです。例えば、以下のとおりです。
    test $NULL != string
    とした場合、NULL が未定義または空であると、以下のようになります。
    test != string
    これは、有効な test 式ではありません。この問題は、$NULL を引用符で囲むことで解決できます。

    これらの 2 つの例は、基本的に同じ機能を実行します。つまり、変数がヌル値を持つという可能性からコマンドを保護します。

次のコマンドは、最初の定位置パラメーターがディレクトリーまたはファイルを含むかどうかを報告します。
if [ -f $1 ]
then
        echo $1 is a file
elif [ -d $1 ]
then
        echo $1 is a directory
else
        echo $1 neither file nor directory
fi
この例では、test の使用法を示していますが、これが効率的な方式というわけではありません。

ローカライズ

test は、次のローカライズ環境変数を使用します。
  • LANG
  • LC_ALL
  • LC_CTYPE
  • LC_MESSAGES
  • LC_SYNTAX
  • NLSPATH

詳しくは、ローカライズを参照してください。

終了値

0
expression は真でした。
1
expression は偽でした。
2
expression の形式は間違いでした。

移植性

POSIX.2, X/Open 移植性ガイド, UNIX システム.

–k–L–nt–ot–ef–a、 および –o 演算子、および演算子をグループ化する括弧の使用は、 すべて POSIX 標準の拡張です。

関連情報

exprfindletlssh