Script para verificar se o iptables está em execução não está funcionando

1

Eu tenho o seguinte script simples para verificar se o iptables está em execução ou não. Por que sempre retorna 'OK', não importa qual seja o status?

#!/bin/bash

#IPT='iptables'
SERV='/sbin/service iptables status'
EXPR='Firewall is stopped.'
        if [ "$SERV" = "$EXPR" ]
                 then
                        echo 'Firewall is not Running'
                        exit 2
                else
                        echo 'OK'
                        exit 0
        fi
    
por j5iApart2 25.07.2012 / 17:21

3 respostas

4

O script de inicialização do iptables nunca retornará exatamente aquela string; sempre terá algo mais nela, e também há condições de falha que não correspondem a essa string.

Em vez disso, você deve verificar o código de saída do script, pois ele (no EL e no Fedora) retorna diferente de zero se o firewall não estiver ativo e zero se estiver ativo.

/sbin/service iptables status >/dev/null 2>&1
if [ $? = 0 ]; then
    echo "All systems go."
else
    echo "Houston, we have a problem."
fi
    
por 26.07.2012 / 02:38
3

Você está definindo $SERV para igualar o valor da string literal " /sbin/service iptables status ", você precisa executar o comando e armazenar o resultado . Você pode verificar isso ecoando $SERV . Conforme escrito, sempre será avaliado como não igual.

SERV=$(/sbin/service iptables status)

Além disso, verifique se a saída é a esperada. Minha versão retorna iptables: Firewall is not running. (o seu claro pode variar).

Leia mais sobre subshells no Guia avançado de script de script .

    
por 25.07.2012 / 17:37
2

Os scripts estão fazendo o que dizem. Lembre-se de que ["$ SERV"="$ EXPR"] está comparando strings e não são iguais.

Assim, o status de saída do teste será sempre diferente de zero, então sempre será "else".

O que você precisa é usar Subtituição de Comando , ao invés de SERV = '/ sbin / service iptables status' você deve usar

SERV="$(/sbin/service iptables status)"

ou

SERV='/sbin/service iptables status'

HTH

    
por 25.07.2012 / 18:10