Unix Shell:If 条件 grep & test



我有以下问题:我尝试发送不同内容的邮件给不同的收件人,当满足以下条件时:

  • 在日志文件中没有找到一个特定的字符串和一个特定的文件存在
  • 在日志文件中找不到一个特定的字符串和一个特定的文件不存在
  • 在日志文件中找到一个特定的字符串,并且存在一个特定的文件
  • 在日志文件中找到一个特定的字符串,并且特定的文件不存在

在最新的日志文件中找到特定的字符串,在此之前的作业中是否创建了特定的文件。问题是:当放入.sh文件并通过putty中的命令行启动它时,它工作了,但是自从我将它转移到UC4后,它就不起作用了。它总是选择错误的选项。

这是我的代码(简化,没有电子邮件部分)

if [ ! grep -q 'errors: 0' "/mypath/$(ls -t /mypath/ | head -n1)" ] && test -e "/mypath2/outtakes.csv"; then

echo 'error + filtered data'
elif [ ! grep -q 'errors: 0' "/mypath/$(ls -t /mypath/ | head -n1)" ] && ! test -e "/mypath2/outtakes.csv"; then

echo 'error + no filtered data'

elif [ grep -q 'errors: 0' "/mypath/$(ls -t /mypath/ | head -n1)" ] && test -e "mypath2/outtakes.csv"; then
echo 'no errors + filtered data'

else

echo 'no errors + no filtered data'
fi

我试着改变括号,分别测试条件,他们工作。它一定与一连串的条件有关。

if检查命令返回状态。[为命令。表达式if [ ! grep -q 'errors: 0' ...没有太大意义;它使用参数!grep等执行[执行grep。如果您想查看grep的返回状态,只需执行:

if ! grep ....

这将执行grep并根据其返回值进行分支。因为!,如果grep返回非零,则进入if分支。

最新更新