Shellスクリプト構文--条件テスト:test[
コマンド
奇妙に見えますが、左かっこ
テストコマンド
2つの文字列が同じ場合は真
文字列が異なる場合は真
C言語と同様に、テスト条件の間には、、、または、非論理演算を行うこともできます.
、または、非のテストコマンド
例:
なお、上記の例の
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
、-gt
、3
、]
は[
コマンドの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