在 netsat shell 中使用 if/else 语句

在 netsat shell 中使用 if/else 语句

我的目标是确保电子邮件连接仅限于出站

所以我有两个 shell 命令,一个是

netstat -an | grep ':25' | grep -v '127.0.0.1' | wc -l

打印出1

上面的命令查找除 localhost 之外的端口 25 的所有实例,但不排除 ipv6

另一个命令是

netstat -an | grep ':25' | grep -v '127.0.0.1\|::1' | wc -l

打印出0

上面的命令查找端口 25 的所有实例,不包括 localhost 和 ipv6

我需要一个 if else 来比较两者并说如果它返回 0 打印输出compliantelse 打印输出non-compliant

通过 ansible 或 shell 执行此操作的最佳方法是什么?

答案1

这是我的处理方法。

#!/bin/bash

if netstat -an | grep ':25' | grep -q -v '127.0.0.1\|::1'
then echo non-compliant
else echo compliant
fi

Bash if 语句可以处理返回码。如果有任何事情通过,它将返回一个肯定的状态并回显不合规,否则它是合规的

如果这个逻辑看起来令人困惑,你也可以用!

if ! netstat -an | grep ':25' | grep -q -v '127.0.0.1\|::1'
then echo compliant
else echo non-compliant
fi

答案2

使用 awk:

netstat -an | grep ':25' | grep -v '127.0.0.1\|::1' | wc -l | awk '{if($0==0) print "compliant"; else print "non-compliant"}'
  • complaint如果输出$0为 0将打印
  • 否则打印non-complaint

相关内容