如果语句Bash

如果语句Bash,bash,if-statement,grep,arguments,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

我试图使用带有
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 
如果尝试使用较短的路径,但没有帮助

任何建议都会有帮助


谢谢,

问题是您的
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
返回的多行,因此它会失败,因为
参数太多

如果要查看是否有任何文件包含字符串“OutOfMemory”,请执行以下操作:

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

问题是您的
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
返回的多行,因此它会失败,因为
参数太多

如果要查看是否有任何文件包含字符串“OutOfMemory”,请执行以下操作:

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

使用
find
搜索文件,然后find的exec将帮助您进行grep。然后将结果存储在某个变量中并使用它。没有回答。有很多例子可以使用
find
搜索文件,然后find的exec将帮助您进行grep。然后将结果存储在某个变量中并使用它。没有回答。这里有很多例子,如果我理解正确,这将在第一个条件违反时退出?谢谢你的快速回答。顺便说一句,我不知道你的意思。它将对所有文件进行grep处理,如果在其中任何一个文件中找到该字符串,则返回退出代码0(true),如果未找到,则返回1(false)。if语句将使用此退出代码。如果
grep
支持该标志,则可以添加
-m1
,以确保
grep
在第一次匹配后返回。
-m1
标志适用于每个输入文件,而不是所有输入文件,这意味着即使在第一个文件中找到匹配项,
grep
仍将在每个文件上运行。我想这是值得添加的,因为grep会在每个文件上更快地返回。如果我理解正确,这将在违反第一个条件时退出?谢谢你的快速回答。顺便说一句,我不知道你的意思。它将对所有文件进行grep处理,如果在其中任何一个文件中找到该字符串,则返回退出代码0(true),如果未找到,则返回1(false)。if语句将使用此退出代码。如果
grep
支持该标志,则可以添加
-m1
,以确保
grep
在第一次匹配后返回。
-m1
标志适用于每个输入文件,而不是所有输入文件,这意味着即使在第一个文件中找到匹配项,
grep
仍将在每个文件上运行。我想无论如何都值得添加,因为grep会在每个文件上更快地返回。