2013-04-24 57 views
0

我试图使用if语句与grep为了检查某个文件中是否存在字符串。现在,grep声明工作本身,但是当我运行它作为if语句的一部分输出为:太多的论据如果声明Bash

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 

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

任何建议都会有所帮助。

谢谢

+0

使用'find'搜索的文件,然后找到的exec会帮助你给grep。然后将结果存储在某个变量中并使用它。没有回答。有很多例子 – abasu 2013-04-24 16:29:28

回答

3

的问题是,你的grep -c不会产生正确的输出。

e.g,你可以得到多个文件:

$ 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

如果你想看看是否有包含字符串“内存不足”的任何文件,而是执行此操作:

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

如果我正确理解你,这将违反第一个条件退出?感谢您快速回答btw。 – 2013-04-24 16:47:47

+0

不确定你的意思。它将grep所有的文件,然后返回一个退出代码0(真),如果在任何一个字符串中找到,或者1(假)如果没有找到。 if语句将使用此退出码。 – dogbane 2013-04-24 16:55:47

+0

如果您的'grep'支持该标志,您可以添加'-m 1'来确保'grep'在第一次匹配后返回。 – chepner 2013-04-24 17:03:26