2

当 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

提前感谢您的亮点,

4

2 回答 2

2

您可以使用-rgrep 选项以递归方式使其在文件夹中 grep:

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

手册页

-R,-r,--递归

递归读取每个目录下的所有文件;这等效于 -d 递归选项。

于 2013-07-16T10:21:03.447 回答
2

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

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

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

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

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

于 2013-07-16T10:27:29.470 回答