Usando uma instrução if / else no shell para netsat

1

Meu objetivo é garantir que as conexões de e-mail sejam limitadas apenas à saída

Então eu tenho dois comandos shell, um é

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

que imprime 1

O comando acima está encontrando todas as instâncias da porta 25 além do host local, mas não exclui o ipv6

O outro comando é

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

que imprime 0

Este comando acima está encontrando todas as instâncias da porta 25 e excluindo localhost e ipv6

Eu preciso de um if else que compara os dois e diz se volta 0 print out compliant else print out non-compliant

Qual é a melhor abordagem ao fazer isso através de ansible ou shell?

    
por W.Smith 06.08.2018 / 17:58

2 respostas

0

Usando o awk:

netstat -an | grep ':25' | grep -v '127.0.0.1\|::1' | wc -l | awk '{if($0==0) print "compliant"; else print "non-compliant"}'
  • imprime complaint se a saída $0 for 0
  • mais print non-complaint
por 06.08.2018 / 18:18
2

Aqui está como eu lidaria com isso.

#!/bin/bash

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

Bash se as instruções puderem lidar com códigos de retorno. Se alguma coisa acontecer, ela retornará um status positivo e ecoará como não-compatível, caso contrário, é compatível

Se essa lógica parece confusa, você também pode inverter o status com um !

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