如果程序的输出包含特定单词,则指示 shell 脚本执行任务

0 bash shell-script pattern-matching

我需要在 Bash 中创建一个程序来启动一个命令,检查结果是否包含一个单词,如果包含,则执行一些操作。

示例:我需要检查打印机是否在线

lpstat -p [printer name]
Run Code Online (Sandbox Code Playgroud)

如果结果包含这个词inactive,脚本应该给我发一封邮件。

如何检查程序输出的单词?

ber*_*sch 5

这是强者的任务grep

lpstat -p myprinter | grep inactive
Run Code Online (Sandbox Code Playgroud)

将 的输出连接lpstat到 的输入grep,然后将打印包含字符串inactive 的那些行。

要打印包含inactive一词 的行(即被空格、逗号等包围的inactive),您可以添加一个选项:

lpstat -p myprinter | grep -w inactive
Run Code Online (Sandbox Code Playgroud)

但是,您想要执行测试。您需要知道,grep只要找到该词,就会生成“成功”的退出值(实际上,它是 0)。这可以用于测试。您对grep命令的输出也不感兴趣,只对成功状态感兴趣。因此,让grep我们保持安静,并围绕它进行测试:

if lpstat -p myprinter | grep -q -w inactive
then
    mail -s "printer is inactive" othin
fi
Run Code Online (Sandbox Code Playgroud)

这是您的阅读作业:https : //www.man7.org/linux/man-pages/man1/grep.1.html