使用if语句检查文件夹中的字符串

时间:2013-07-16 10:19:15

标签: linux bash grep

我正在寻找一个动作,当bahsscript在我家的文件中找到一个字符串,但不知何故它不起作用,我不明白为什么.. 我的印象是我的grep不返回0(而字符串确实存在于文件中)。

#!/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 

当我执行以下操作时,我的shell会返回123而不是0

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

提前感谢您的亮点,

2 个答案:

答案 0 :(得分:2)

您可以使用grep的-r选项以递归方式在文件夹中创建grep:

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

来自man page

  

-R,-r, - recursive

     

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

答案 1 :(得分:2)

这是xargs的返回代码,如果你查看手册,你会发现:

  

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

这意味着你的grep返回了一个非零的退出代码,当grep与字符串不匹配时就是这种情况:

  

通常情况下,如果找到选定的行,则退出状态为0,否则为1。

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