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