test:使用-z选项时预期的参数

时间:2011-07-19 23:18:16

标签: unix crontab

我有一个unix脚本,偶尔会出现错误消息“test:argument expected”。以下代码行是脚本中唯一的if语句

if [ -z `grep ">Success<" $OUTFILE` ]

$ OUTFILE是脚本开始运行时创建的文件。该脚本调用将输出写入OUTFILE的Web服务。如果outfile中包含“Success”,则表示Web服务已成功完成。

此脚本每10分钟调用一次,对于大多数情况,上述逻辑完全正常。但偶尔,脚本错误输出测试参数预期错误,我无法弄清楚这个错误的原因。还有其他人遇到过类似的问题吗?如果有人可以提供指向这个问题的指示,那就太好了。

感谢。

2 个答案:

答案 0 :(得分:3)

您没有将`command`字符串包装在双引号中,因此如果找不到该字符串,该命令将缩减为if [ -z ],这是一个错误(缺少参数)。 (它扩展为 nothing ,而不是扩展为空参数。)它正在以艰难的方式做事。

if grep ">Success<" $OUTFILE

您可能需要-s上的grep和(如果是GNU -qgrep选项。

答案 1 :(得分:0)

您应该将参数引用到-z

if [ -z "$(grep ">Success<" $OUTFILE)" ]

当然,要测试是否找到>Success< ,还有一种更简单的方法:

if grep -q ">Success<" $OUTFILE