ちゃんと書いているつもりなのに、「unary operator expected」とか「test: too many arguments」 のようなエラーが出る。
・条件式に変数を使っていて、その変数がNullだとこのようなことが起きる。
つまり、
while [ $hoge -ne 10 ]
みたいな式で、$hogeがnullだと、
-ne 10
が評価され、unary operator expected となる。
また、
while [ 11 -ne 10 -a $fuga -eq 9 ]
で$fugaがNullだと、
11 -ne 10 -a -eq 9
として評価され、too many arguments
となる。
変数は初期化する。
もしくは、文字列で、Null、もしくは、"" が入る可能性があるのなら、変数を""で括る。
[ "$hoge" = "test" ]
hogeが初期化されていない場合でも、""として評価され、エラーにはならない。
逆に、
[ $hoge = "test" ]
の場合、たとえ hoge に "" を代入していても、unary operator expected となる。
追記
[[ $hoge = "test" ]]
とすれば、$hoge を""で囲わなくてもエラーになることはない。
if 文と test コマンド - UNIX & Linux コマンド・シェルスクリプト リファレンス