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

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

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


From: Felipe Rodrigues Maia
Subject: Res: [shell-script] Exportar resultado de função
Date: Sun, 22 Aug 2010 10:01:27 -0700 (PDT)

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
address@hidden




________________________________
De: Cristiano <address@hidden>
Para: address@hidden
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]



reply via email to

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