我有一个unix脚本,偶尔会出现错误消息“test:argument expected”。以下代码行是脚本中唯一的if语句
if [ -z `grep ">Success<" $OUTFILE` ]
$ OUTFILE是脚本开始运行时创建的文件。该脚本调用将输出写入OUTFILE的Web服务。如果outfile中包含“Success”,则表示Web服务已成功完成。
此脚本每10分钟调用一次,对于大多数情况,上述逻辑完全正常。但偶尔,脚本错误输出测试参数预期错误,我无法弄清楚这个错误的原因。还有其他人遇到过类似的问题吗?如果有人可以提供指向这个问题的指示,那就太好了。
感谢。
答案 0 :(得分:3)
您没有将`command`
字符串包装在双引号中,因此如果找不到该字符串,该命令将缩减为if [ -z ]
,这是一个错误(缺少参数)。 (它扩展为 nothing ,而不是扩展为空参数。)它正在以艰难的方式做事。
if grep ">Success<" $OUTFILE
您可能需要-s
上的grep
和(如果是GNU -q
)grep
选项。
答案 1 :(得分:0)
您应该将参数引用到-z
!
if [ -z "$(grep ">Success<" $OUTFILE)" ]
当然,要测试是否找到>Success<
,还有一种更简单的方法:
if grep -q ">Success<" $OUTFILE