netsat 쉘에서 if/else 문 사용

netsat 쉘에서 if/else 문 사용

내 목표는 이메일 연결이 아웃바운드로 제한되도록 하는 것입니다.

그래서 두 개의 쉘 명령이 있습니다. 하나는 다음과 같습니다.

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의 모든 인스턴스를 찾습니다.

두 가지를 비교하고 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

관련 정보