如果声明Bash,则参数太多

时间:2013-04-24 16:20:10

标签: bash if-statement grep arguments

我正在尝试使用带有grep的if语句来检查某些文件中是否存在字符串。现在,grep语句本身就可以工作,但是当我将它作为if语句的一部分运行时,输出是:

line 6: [: too many arguments

我的代码:

#!/bin/bash

if [ $(grep -c "OutOfMemory" /my/path/to/domains/*/*/subdomains/*/logs/*.*) -ne 0 ];    
then
     echo "String found" 

else
     echo "String not found"

fi 

如果尝试使用较短的路径,但它没有帮助。

任何建议都会有所帮助。

谢谢,

1 个答案:

答案 0 :(得分:3)

问题是你的grep -c没有产生正确的输出。

例如,您可以获得多个文件:

$ grep -c "OutOfMemory" /my/path/to/domains/*/*/subdomains/*/logs/*.*
/my/path/to/domains/a/b/subdomains/c/logs/my.log:1
/my/path/to/domains/a/b/subdomains/c/logs/another.log:2

您的if语句无法处理grep返回的多行,因此too many arguments失败。

如果您想查看是否有任何包含字符串“OutOfMemory”的文件,请改为:

if grep -q "OutOfMemory" /my/path/to/domains/*/*/subdomains/*/logs/*.*
then
...