netsat シェルで if/else 文を使用する

netsat シェルで if/else 文を使用する

私の目標は、電子メール接続がアウトバウンドに制限されるようにすることです。

したがって、2つのシェルコマンドがあります。 1つは次のとおりです。

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

上記のコマンドは、localhostとipv6を除くポート25のすべてのインスタンスを検索します。

2つを比較して0を返す場合、compliantelse印刷を返すにはif elseが必要です。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出力が$00の場合は印刷されます。
  • それ以外の場合は印刷non-complaint

関連情報