shell 备份脚本,缺少`]`

shell 备份脚本,缺少`]`

我正在编写一个简单的备份脚本,它将压缩文件夹的内容,然后将该文件移动到备份服务器。该脚本在移动之前确保 tar 文件存在并且不为零字节。

问题是脚本在其中一条 IF 行上终止

if [ -f /www/archives/pdf/pdf_201207021048.tar && 11294720 -gt 0 ]; then
    echo "tar file exists and is greater than 0 bytes."
else
    echo "tar file does not exist or is zero bytes"
fi

控制台中的错误是:

./backup_pdf.sh: line 49: [: missing `]'

第49行是上面的if语句。

该脚本已成功验证

sh -n backup.sh

sh看到缺少“]”,但它通过了语法检查,这是怎么回事?

答案1

问题是&&不是 的有效运算符[。它需要-a改为 或[ condition ] && [ other_condition ]

&&是一个分隔器(如;||&\n)在 posix shell 中。它看到了声明[ -f www/archives/pdf/pdf_201207021048.tar;该语句结束是因为有一个&&,然后还有另一个语句(如果到达它也会导致错误),看起来像11294720 -gt 0 ],并且该语句以 终止;

相关内容