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

Responder a