我有以下问题:我尝试发送不同内容的邮件给不同的收件人,当满足以下条件时:
- 在日志文件中没有找到一个特定的字符串和一个特定的文件存在
- 在日志文件中找不到一个特定的字符串和一个特定的文件不存在
- 在日志文件中找到一个特定的字符串,并且存在一个特定的文件
- 在日志文件中找到一个特定的字符串,并且特定的文件不存在
在最新的日志文件中找到特定的字符串,在此之前的作业中是否创建了特定的文件。问题是:当放入.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
分支。