Unix bash错误 - 二进制运算符预期

时间:2016-12-02 18:53:47

标签: bash shell unix command

以下是我的bash脚本中的代码。当我给出命令2个参数时,我得到一个错误,说二元运算符是预期的(当我给出1个参数时,不会给出错误)。当我提供2个参数时,它确实会更改文件权限,因为当我执行ls -l时我可以看到它,但它仍然给我这个错误。我该如何解决?

for file in $@
do
    chmod 755 $file
done

if [ -z $@ ]
then
        echo "Error. No argument."
        exit $ERROR_CODE_1
fi

我现在添加了这个

if [ ! -f "$*" ]
then
       echo "Error. File does not exist"
       exit $ERROR_NO_FILE
fi

但是现在当我输入多于1个参数时,它只会在if语句中执行所有操作(即打印error.file不存在),即使该文件存在也是如此。

2 个答案:

答案 0 :(得分:3)

另一种方式:只要询问传递了多少参数:

...
if [ $# -eq 0 ]
...

您的代码中出现错误,因为$ @变量扩展为多个单词,这使得test命令看起来像这样:

  

[-z parm1 parm2 parm3 ...]

答案 1 :(得分:2)

$@正在扩展到所有参数,它们之间有空格,所以它看起来像:

if [ -z file1 file2 file3 ]

-z只需要一个字。您需要使用$*并引用它,因此它会扩展为一个单词:

if [ -z "$*" ]

这扩展为:

if [ -z "file1 file2 file3" ]

或者只是检查参数的数量:

if [ $# -eq 0 ]

您还应该在for循环之前进行此检查。你应该引用for循环中的参数,这样你就不会遇到有空格的文件名问题:

for file in "$@"