形式
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
- string1 と string2 が同一の場合、真。
- string != string
- string1 と string2 が同一でない場合、真。
- number1 –eq number2
- number1 と number2 が等しい場合、真。
シェル内では、どちらの数値も任意のシェル 算術式にすることができます。後続の 5 つの数値比較にも同じことが適用されます。number1 と number2 は
両方とも整数でなければなりません。
- number1 –ge number2
- number1 が number2 より大きいか、または等しい場合、真。
- number1 –gt number2
- number1 が number2 より大きい場合、真。
- number1 –le number2
- number1 が number2 より小さいか、または等しい場合、真。
- number1 –lt number2
- number1 が number2 より小さい場合、真。
- number1 –ne number2
- number1 が number2 と等しくない場合、真。
- file1 –nt file2
- file1 が file2 より新しい場合、真。
- file1 –ot file2
- file1 が file2 より古い場合、真。
- file1 –ef file2
- file1 が file2 と同じデバイスと i ノード番号を持っている場合、真。
- file –CS codeset
- file がコード・セットを指定してタグ付けされている場合、真。
- file –Ml seclabel
- ファイルがマルチレベル・セキュリティー・ラベル seclabel を持っている場合、真。ファイルが seclabel に一致するセキュリティー・ラベルを持っていない場合、偽。
- expr1 –a expr2
- 論理 AND; expr1 と expr2 が両方とも真の場合、真。
- expr1 –o expr2
- 論理 OR; expr1 と expr2 のどちらかが真の場合、真。
- ! expr
- 論理否定; expr が偽の場合、真。
- ( expr )
- バインディング; expr が真の場合、真。
演算子の優先順位は降順で、単項演算子、比較演算子、論理 AND、論理 OR の順です。
テスト・コマンドの 2 番目の形式:
[ expression ]
は、最初のものと同義です。
使用上の注意
- test は、組み込みシェル・コマンドです。
- 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 標準の拡張です。