【发布时间】:2021-12-30 14:13:57
【问题描述】:
我正在编写一个 bash 脚本来监控脚本 A 的输出,并通过“grep”命令匹配关键字。如果成功找到关键字,请回显某些内容。这是我的脚本:
if script_A | grep -q 'keyword';
then
echo 'Found A!'
如果只有一个条件,脚本就可以正常运行。但是我找不到匹配多个关键字的方法,并使用“if...elif...else”来控制不同条件的回显内容。
这是我想要实现的逻辑:
script_A |
if grep 'keyword_A';
then echo 'Found A!'
elif grep 'keyword_B';
then echo 'Found B!'
else echo 'Found Nothing!'
谢谢!
【问题讨论】:
-
使用
awk可能会更容易。 -
我建议使用
logger,然后使用您的系统日志管理器过滤掉输出。 -
每个管道有一个读卡器和一个写卡器。当
script_A写入一行时,只有一个程序可以读取该行。你可以让一个程序类似于tee,或者你可以让shell将输出捕获到一个变量中,然后shell可以重复多次,但你不能让一个写有多个grep副本直接阅读。 -
顺便说一句,
script_A的输出有多大?如果足够短,可能根本没有理由使用grep; shell 有自己的内置正则表达式和模式匹配;如果它特别大,则意味着需要内存高效的答案。
标签: bash