Boa tarde Cristiano. Você não consegue obter o valor das variáveis da função que você definiu justamente por elas serem visíveis apenas localmente (dentro da função). Você pode escrever as funções para retornarem um valor, e posteriormente "alimentar" uma variável, em local visível e apropriado.
Uma forma um pouco mais elegante e "reutilizável" de fazer isso seria: ###################################### --- Arquivo lib.sh #!/bin/bash function getPorta(){ grep '^'${1}';' /etc/firewall/services.conf | cut -f 2 -d ';' } function getProtos(){ grep '^'${1}';' /etc/firewall/services.conf | cut -f 3 -d ';' } ----- --- Arquivo exec.sh #!/bin/bash source lib.sh ; #Importa as funções e variáveis globais definidas em outro arquivo. function execIptables(){ PORTA=$(getPorta ${1}); PROTOS=$(getProtos ${1}); for PROTO in $(echo $PROTOS) ; do echo "iptables -A FORWARD -p $PROTO --dport $PORTA -i $IF_IN -j DROP"; done } ### Testes -- echo -e "Teste DNS:\n $(execIptables "DNS") " echo -e "Teste BACULA_DIR:\n $(execIptables "BACULA_DIR") " ----- ###################################### Mais interessante ainda seria se você conseguisse definir uma função para fazer apenas um "grep", utilizando um "read" e separando pelo delimitador ';'. Daí seria possível fazer tudo isso em uma linha só, dentro de um loop "for". Dei uma olhada bem rápida aqui nos manuais do linux e não consegui ver se é possível fazer o read utilizar delimitadores. Mas com um pouquinho mais de pesquisa acho que é possível. Um abraço, Felipe Rodrigues Maia felipe_rm...@yahoo.com.br ________________________________ De: Cristiano <boxferr...@gmail.com> Para: shell-script@yahoogrupos.com.br Enviadas: Sábado, 21 de Agosto de 2010 11:47:37 Assunto: [shell-script] Exportar resultado de função 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. [As partes desta mensagem que não continham texto foram removidas]