2013-07-16 30 views
2

我在寻找一个动作,当一个bahsscript在我的家中找到一个文件中的字符串,但不知何故它不工作,我不明白为什么.. 我有我的grep不会返回0的印象(而字符串确实存在于文件中)。用if语句检查文件夹中的字符串

#!/bin/bash 
find /home/ -type f | xargs grep -q 'stringtofind' 
if [ $? == 0 ] #if the result is not equal to zero 
then 
    echo "Action" 
else 
    echo "Pas d'action" 
    exit 1 
fi 
exit 0 

当我做了以下我的壳返回我123,而不是0

find /home/anselmewebsite/ -type f | xargs grep -q 'stringtofind' ; echo $? 
shell returns : 123 

预先感谢您的亮点,

回答

2

您可以使用grep的-r选项,以使它递归地在文件夹中grep:

grep -r yourstring /path/to/your/folder 

man page

-R,-r,--recursive

阅读每个目录,递归下的所有文件;这相当于-d递归选项。

+0

非常感谢。正如我之前所说,我不知道为什么我使用xargs时,grep可以自己做到这一点..初学者的错误。再次感谢。 – Anselme

+0

@安塞尔姆没问题。请注意,一些发行版为'grep -r'提供'rgrep'简写。如果你的发行版没有,你可以在你的.bashrc中创建一个别名:'alias rgrep =“grep -r”' – hek2mgl

+0

感谢有用的提示..确实grep -r将需要很多:) – Anselme

2

这是xargs的返回码,如果你看看说明书,发现:

123如果命令的任何调用与状态退出1-25

这意味着您的grep返回非零退出代码,这是grep不匹配字符串时的情况:

通常,退出状态为0如果选中的行被找到,则返回1。

因此,我强烈建议您使用grep与-R递归选项,如果任何文件中存在匹配,则应返回0。在上面的例子中,只要一个文件不包含搜索模式,xargs将返回123,并且脚本的逻辑被破坏。

+0

非常感谢你.. 你是对的。我不知道为什么我使用xargs时,grep可以自己做。初学者的错误。再次感谢。 – Anselme

+0

@安塞尔姆,你不是“错”,你正在学习。这是一个很好的问题。 –