shell-script-pt
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [shell-script] Exportar resultado de função


From: Alexandre Mulatinho
Subject: Re: [shell-script] Exportar resultado de função
Date: Sun, 22 Aug 2010 11:15:01 -0300
User-agent: Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.1.11) Gecko/20100711 Thunderbird/3.0.6

Bom dia,

A melhor forma para fazer isso na minha opinião é guardando em uma
variável a linha de argumentos e processando ela após isso.

No caso:

Esqueça essa função "GetService", irá ficar redundante;

--script--
ARQUIVO=conteudo.txt
TOTAL=`cat conteudo.txt | wc -l`

while read LINE
do
    LINE=`sed -n "/$1/p" conteudo.txt`
    PORTA=`echo $LINE | cut -d';' -f2`
    PROTO=`echo $LINE | cut -d';' -f3`

    iptables -A FORWARD -p $PROTO --dport $PORTA -i $IF_IN -j DROP
done << $ARQUIVO
--script--

Ou se realmente quiser passar um argumento para função:

--script-
function GetService()
{
    LINE=`sed -n "/$1/p" conteudo.txt`
    PORTA=`echo $LINE | cut -d';' -f2`
    PROTO=`echo $LINE | cut -d';' -f3`
}

GetService "FTP"
iptables -A FORWARD -p $PROTO --dport $PORTA -i $IF_IN -j DROP
--script--

Mas aí voce vai ter que fazer um por um :P

Mete a mão na massa!

abraços,
Mulatinho.

On 08/21/2010 11:47 AM, Cristiano wrote:
> Senhores, bom dia.
>
> Estou otimizando um script de firewall e tenho um arquivo que descreve 
> serviços e portas.
>
> Seu conteúdo é +- assim:
>
> BACULA_DIR;9101;tcp udp
> BACULA_FD;9102;tcp udp
> BACULA_SD;9103;tcp udp
> DNS;53;tcp udp
> FIREBIRD;3050;tcp
> FTP;20:21;tcp
> GMAIL_POP;995;tcp
>
> A ideia é criar uma função que receba como parâmetro o nome do serviço (campo 
> 1) e que retorne a porta (campo 2) e os protocolos (campo 3), atribuídos 
> respectivamente à variáveis PORTA e PROTOS.
>
> Porém, a atribuição da variável feita dentro da função não é exportada para o 
> shell que a chamou.
>
> Como eu faço para usar estas variáveis, atribuídas dentro da função, fora 
> delas. Exemplo:
>
> function GetService () {
> PORTA=$(grep '^'${1}';' /etc/firewall/services.conf | cut -f 2 -d ';')
> PROTOS=$(grep '^'${1}';' /etc/firewall/services.conf | cut -f 3 -d ';')
> }
>
> # (...)
>
> GetService "DNS"
>
> for PROTO in $(echo $PROTOS) ; do 
>     iptables -A FORWARD -p $PROTO --dport $PORTA -i $IF_IN -j DROP
> done
>
>
> Sei que a dúvida conceitual é bem básica; até meio besta, mas me deu um 
> branco.
>
>
>
>   


-- 
Alexandre Mulatinho
Analista de Suporte/Sistemas
Fone: +55 81 92781715



reply via email to

[Prev in Thread] Current Thread [Next in Thread]