Shellスクリプト構文--条件テスト:test[


コマンドtestまたは[は、条件が成立しているかどうかをテストすることができ、テスト結果が真である場合、コマンドのExit Statusは0であり、テスト結果が偽である場合、コマンドのExit Statusは1である(C言語の論理表現とは正反対であることに注意).例えば、2つの数のサイズ関係をテストする.
$ VAR=2
$ test $VAR -gt 1
$ echo $?
0
$ test $VAR -gt 3
$ echo $?
1
$ [ $VAR -gt 3 ]
$ echo $?
1

奇妙に見えますが、左かっこ[は確かにコマンドの名前で、コマンドに渡される各パラメータの間はスペースで区切らなければなりません.たとえば、$VAR-gt3][コマンドの4つのパラメータで、それらの間はスペースで区切らなければなりません.コマンドtestまたは[のパラメータ形式は同じですが、testコマンドには]のパラメータは必要ありません.[コマンドを例にとると、一般的なテストコマンドは次の表に示されています.
テストコマンド[ -d DIR ] DIRが存在し、ディレクトリである場合は真[ -f FILE ] FILEが存在し、通常のファイルである場合は真[ -z STRING ] STRINGの長さがゼロであれば真[ -n STRING ] STRINGの長さがゼロでなければ真[ STRING1 = STRING2 ]
2つの文字列が同じ場合は真[ STRING1 != STRING2 ]
文字列が異なる場合は真[ ARG1 OP ARG2 ] ARG1およびARG2は整数または整数の値をとる変数であるべきであり、OP-eq(等しい)-ne(等しくない)-lt(以下)-le(以下)-gt(以下)-ge(以上)のうちの1つである
C言語と同様に、テスト条件の間には、、、または、非論理演算を行うこともできます.
、または、非のテストコマンド[ ! EXPR ] EXPRは、上記の表のいずれかの試験条件であってもよい.論理的に逆を表す[ EXPR1 -a EXPR2 ] EXPR1およびEXPR2は、上記の表のいずれかの試験条件であり、-aは論理および[ EXPR1 -o EXPR2 ] EXPR1およびEXPR2は、上記の表のいずれかの試験条件であり、-oは論理または
例:
$ VAR=abc
$ [ -d Desktop -a $VAR = 'abc' ]
$ echo $?
0

なお、上記の例の$VAR変数が事前に定義されていない場合、Shellによって空文字列に展開されると、試験条件の構文エラー([ -d Desktop -a = 'abc' ]に展開)となり、良いShellプログラミング習慣として、常に変数の値を二重引用符に入れるべきである([ -d Desktop -a "" = 'abc' ]に展開):
$ unset VAR
$ [ -d Desktop -a $VAR = 'abc' ]
bash: [: too many arguments
$ [ -d Desktop -a "$VAR" = 'abc' ]
$ echo $?
1