0 bash shell-script pattern-matching
我需要在 Bash 中创建一个程序来启动一个命令,检查结果是否包含一个单词,如果包含,则执行一些操作。
示例:我需要检查打印机是否在线
lpstat -p [printer name]
Run Code Online (Sandbox Code Playgroud)
如果结果包含这个词inactive
,脚本应该给我发一封邮件。
如何检查程序输出的单词?
这是强者的任务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。