Bash 如果命令行输出没有';不包含一个srting

Bash 如果命令行输出没有';不包含一个srting,bash,shell,centos,sh,Bash,Shell,Centos,Sh,我已经在我的Web服务器上安装了Clamav 我知道有很多shell脚本可以进行日常扫描 但不幸的是,我无法理解它的台词:) 我想创建一个简单的bash脚本来扫描/home目录,如果有受感染的文件,就给我发一封电子邮件 #!/bin/bash var=$(clamscan -i /home &> /dev/null) if [[ $var != *Infected files: 0* ]] then echo "Subject: There are infected files

我已经在我的Web服务器上安装了Clamav

我知道有很多shell脚本可以进行日常扫描

但不幸的是,我无法理解它的台词:)

我想创建一个简单的bash脚本来扫描/home目录,如果有受感染的文件,就给我发一封电子邮件

#!/bin/bash
var=$(clamscan -i /home &> /dev/null)
if [[ $var != *Infected files: 0* ]]
then
  echo "Subject: There are infected files" | sendmail -v root
fi
但是前面的代码不起作用

注意:代码中的问题不在文件权限中

更新

最终工作代码

#!/bin/bash
scanoutput=$(clamscan -ri /home 2>&1)
if [ $? -gt 0 ]; then
echo -e "Subject: ClamScan: there are infected files\nTo: root\n\n$scanoutput" | /usr/sbin/sendmail -t
fi

您必须在要比较的字符串中引用或转义空格:

[[ $var != *"Infected files: 0"* ]]

您必须在要比较的字符串中引用或转义空格:

[[ $var != *"Infected files: 0"* ]]

尝试使用
退出代码
,而不是使用字符串输出。 clamscan手册中有以下内容

RETURN CODES
       0 : No virus found.

       1 : Virus(es) found.

       2 : Some error(s) occured.
因此,您可以尝试以下方法:

#!/bin/bash
clamscan -i /home &> /dev/null
clamscan_exit_code="$?"

if [[ "${clamscan_exit_code}" == '1' ]]; then
  echo "Subject: There are infected files" | sendmail -v root
fi

此外,如果出现错误,您还可以通过检查
退出代码==2
尝试使用
退出代码来发送特定电子邮件,而不是使用字符串输出。
clamscan手册中有以下内容

RETURN CODES
       0 : No virus found.

       1 : Virus(es) found.

       2 : Some error(s) occured.
因此,您可以尝试以下方法:

#!/bin/bash
clamscan -i /home &> /dev/null
clamscan_exit_code="$?"

if [[ "${clamscan_exit_code}" == '1' ]]; then
  echo "Subject: There are infected files" | sendmail -v root
fi
此外,如果出现错误,您还可以通过选中退出代码==2来发送特定的电子邮件。这建议了解决问题的另一种方法,但我将其稍微修改为下表

#!/bin/bash
clamscan --quiet /home 2>/dev/null || echo "System infected" | sendmail -v root
PS:修复了错误的逻辑表达式

这建议了另一种解决问题的方法,但我将其稍微修改为以下形式

#!/bin/bash
clamscan --quiet /home 2>/dev/null || echo "System infected" | sendmail -v root

PS:修复了错误的逻辑表达式

比我快+1。好主意。但是如果我想将扫描输出作为邮件正文发送,该怎么办?我建议您将命令输出重定向到一个文件,如
clascan-I/home&>scan_output.txt
,然后将其附加到电子邮件。@JonathaDaguerre感谢您的帮助,我更新了我的问题,并在1分钟前将最后的代码添加到它+1。好主意。但是如果我想将扫描输出作为邮件正文发送,该怎么办?我建议您将命令输出重定向到一个文件,如
clascan-I/home&>scan_output.txt
,然后将其附加到电子邮件中。@JonathaDaguerre谢谢您的帮助,我更新了我的问题,并在1分钟前添加了最后的代码“可能不起作用”..... 那么,你的猫着火了,你的皮卡车刚刚生了一只河马?说明某些东西如何不起作用通常非常有用。“可能不起作用”。。。。。那么,你的猫着火了,你的皮卡车刚刚生了一只河马?说明某些东西是如何工作的通常非常有用。非常感谢,但我将在消息正文中发送输出非常感谢,但我将在消息正文中发送输出