检查给定端口是否包含在输出中,如果它运行另一个命令

检查给定端口是否包含在输出中,如果它运行另一个命令

我有一个commandbprintf '%s' "${PORTS[0]}"; printf ',%s' "${PORTS[@]:1}"

它列出了另一个命令的端口,其输出commandb如下所示:

2200,800,8000

这些端口存储在文件名中res.txt

我想检查是否commandb有特定的端口8000,如果有,我想运行一个commandc,否则什么也不做。

我怎样才能在 bash 中实现这一目标?

答案1

您可以使用grep -w指定字边界:

$ grep -qw '8000' res.txt && echo 'hello world'
hello world

-q选项只是阻止grep打印结果,因此您可以简单地对退出代码进行操作。如果没有该-w选项,您将获得成功的结果,80因为它包含在800and中8000

$ grep -q '80' res.txt && echo 'hello world'; echo $?
hello world
0
$ grep -qw '80' res.txt && echo 'hello world'; echo $?
1

为了检查是否存在多个端口,您可以执行以下操作:

if grep -qw -e '8000' -e '80' res.txt; then
    do something
fi

相关内容