[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