私の目標は、電子メール接続がアウトバウンドに制限されるようにすることです。
したがって、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を返す場合、compliant
else印刷を返すには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
出力が$0
0の場合は印刷されます。- それ以外の場合は印刷
non-complaint