linux shell脚本if-else语句 im在下面指定仅限grep的span 1和span 2用于查找的命令

linux shell脚本if-else语句 im在下面指定仅限grep的span 1和span 2用于查找的命令,shell,Shell,我想写一封信 如果在使用grep命令时发现单词“Down”,请发送电子邮件警报,否则不要发送电子邮件 我使用ssmtp发送电子邮件警报,如下所示 [root@samba ~]# cat show-spans | grep -e 1 -e 2 | grep Down PRI span 1/0: In Alarm, Down, Active 我想把它写成剧本。请帮忙。我可以很快看到至少3个选项 对于临时文件,最明显的是: cat show-spans | grep -e 1 -e 2 | grep

我想写一封信

如果在使用grep命令时发现单词“Down”,请发送电子邮件警报,否则不要发送电子邮件

我使用ssmtp发送电子邮件警报,如下所示

[root@samba ~]# cat show-spans | grep -e 1 -e 2 | grep Down
PRI span 1/0: In Alarm, Down, Active

我想把它写成剧本。请帮忙。

我可以很快看到至少3个选项

  • 对于临时文件,最明显的是:

    cat show-spans | grep -e 1 -e 2 | grep Down| mail -s "Test email alert" indiaxxx@gmail.com
    
    TEXT=$(cat show-spans | grep Down)
    if [ -n "$TEXT" ]; then
        printf "%s\n" "$TEXT" | mail -s "Test email alert" indiaxxx@gmail.com
    fi
    
    (或者,if可以测试
    [0=$?]
    ;grep在找到时总是打印一些东西,如果没有,则什么也不打印,因此测试非空输出或grep退出状态是等效的)

    请注意,命令替换会去除尾随的空白,但在其他情况下,它会保留包括换行符在内的所有字符,因此这将适用于多行

    printf
    命令比
    echo
    更可靠,因为
    echo
    解释一些转义序列,并且存在互不兼容的实现,它们的执行方式不同
    printf
    仅解释第一个参数中的转义

  • 对于仍然没有临时文件的大输入:

    cat show-spans | grep -e 1 -e 2 | grep Down| mail -s "Test email alert" indiaxxx@gmail.com
    
    TEXT=$(cat show-spans | grep Down)
    if [ -n "$TEXT" ]; then
        printf "%s\n" "$TEXT" | mail -s "Test email alert" indiaxxx@gmail.com
    fi
    
    read
    将尝试读取grep输出的第一行,如果读取成功,将重新打印,其余部分通过cat直接复制到
    mail
    read
    可能应该是
    read-r
    ,以避免在shell支持的情况下解释转义序列


  • 非常感谢简·胡德克。实际上pri show spans命令out only我在show spans文件中打印了输出。。所以,正如您所说,我们不想创建不必要的文件,如show-spans-validpoint。我应该走哪一步选择3?或者你有改变,请引导我认为选择2是最短的,最切中要害的。如果存在输出量巨大(数百KB或更多)的风险,请使用选项3[root@samba~]#./alert.sh未指定主收件人的发送选项。用法:mail-eiiudeftbdnhrv~-T FILE-u USER-h hops-r address-s SUBJECT-a FILE-q FILE-f FILE-a ACCOUNT-b USERS-c USERS-s OPTION USERS[root@samba~]#vi alert.sh[root@samba~]#cat alert.sh TEXT=$(cat show span | grep Down)如果[-n“$TEXT”];然后打印“%s\n”$TEXT“| mail-s”测试电子邮件警报indiaxxx@gmail.com fi@san:我认为您在
    mail
    的参数中缺少空格。TEXT=$(cat show span | grep Down)if[-n“$TEXT”];然后打印“%s\n”$TEXT“| mail-s”测试电子邮件警报indiaxxx@gmail.com检查这是正确的吗?pl帮助
    cat show-spans | grep Down | {
        if read FIRST; then
            {
                 printf "%s\n" "$FIRST"
                 cat
            } | mail -s "Test email alert" indiaxxx@gmail.com
       fi
    }