Bash 使用IF循环grep模式并执行语句

Bash 使用IF循环grep模式并执行语句,bash,awk,Bash,Awk,我有一个目录,其中包含20个子目录,所有子目录名称以“\u b”结尾。在每个子目录中都有相同的文件名“error.txt”。我需要循环到所有子目录,并在“sub directory/error.txt”文件中找到一个名为“ECHO”的单词,如果该单词存在,我需要执行语句一,如果“ECHO”这个单词不在文件“sub directory/error.txt”中,我需要执行语句二。 我试着这样做: #!/bin/bash File="./error.txt" for d in *_

我有一个目录,其中包含20个子目录,所有子目录名称以“\u b”结尾。在每个子目录中都有相同的文件名“error.txt”。我需要循环到所有子目录,并在“sub directory/error.txt”文件中找到一个名为“ECHO”的单词,如果该单词存在,我需要执行语句一,如果“ECHO”这个单词不在文件“sub directory/error.txt”中,我需要执行语句二。 我试着这样做:

#!/bin/bash
File="./error.txt"
for d in *_b;
do
if grep -q "ECHO" "$File"; then
echo "$d:";
    Statement 1 
echo "------------------";
else 
echo "$d:";
    Statement 2 
echo "------------------";
fi
done
但我没有得到期望的输出,我得到的输出是:

grep: ./error.txt: No such file or directory

我只是想调整一下路径就行了

#!/bin/bash
File="error.txt"
for d in *_b;
do
if grep -q "ECHO" $d/"$File"; then
echo "$d:";
    Statement 1
echo "------------------";
else
echo "$d:";
    Statement 2
echo "------------------";
fi
done

我仍然看到相同的错误:grep:error.txt:没有这样的文件或目录。这里error.txt是所有20个子目录中的一个常见文件名,我需要循环到所有20个子目录,并在“error.txt”文件中为“ECHO”一词添加grep。确保它不是grep:*u b/error.txt:没有这样的文件或目录,我几乎看不出
$d
可以为空的原因(不过路径应该用双引号引起来)在读取-r-d“”文件时查找*_b-maxdepth 1-type f-iname error.txt-print0;如果grep-qi回显“$file”,则执行此操作;然后。。。其他的fi;done是一个更好的选择循环,而不是简单的文件名(示例),也许不区分大小写的搜索(i)会提供更多的结果不是你要问的问题,但不要重复代码-移动
echo“$d:”
在您的
if else
回显“----------------------”之前到后面。您不需要
s顺便说一句。