[Shell Script] Estrutura FOR – chega de ficar repetindo comandos!!!
Autor: Jonatan Da Cunha | Publicado: 2012-09-10T12:18:00-07:00


Uma das principais funções de um script de Shell para um administrador Linux é agilizar o cumprimento de tarefas de alta demanda. No post anterior, utilizamos o “canivete suíço” FIND para fazer backup via script de Shell Bash e neste aqui vamos ver 2 exemplos de uma estrutura de repetição importantíssima: o FOR.
A estrutura FOR é fundamental para que tarefas repetidas sejam facilmente executadas sem muito esforço por parte do administrador. O uso de tal estrutura em linguagem BASH vai permitir a manipulação de listas de dados, como usuários a serem criados, diretórios para backup, IPS e MACs em regras de firewall, etc.
A sintaxe da estrutura FOR é a seguinte:

for &lt;variável&gt; in &lt;lista&gt;

do

&lt;comandos&gt;

done

Em síntese, a cada vez que cada item da lista é interpretado, o valor dele é atribuído à variável, sendo assim, podemos tratar um valor da lista de cada vez nos comandos que serão executados.
Aqui nesse laboratório nós vamos tratar 2 ‘cases’:
Criação de usuários em demanda;
Bloqueio de acesso a uma lista de domínios através do Iptables.

CRIAÇÃO DE USUÁRIOS EM DEMANDA

Antes de começarmos, aí vai uma explicação básica sobre o comando ‘useradd’ :

#useradd -m -d &lt;HOMEDIR&gt; -s &lt;SHELL DO USUÁRIO&gt; -g &lt;GRUPO PRIMÁRIO&gt; &lt;LOGIN DO USUÁRIO&gt;

O comando useradd tem uma sintaxe bem peculiar, uma vez que o último item é o login do usuário.

Vamos à criação do script:

#vim /usr/local/bin/cria_usr.sh



Explicando:

A estrutura for funciona tratando listas de dados e processando linha por linha dessas listas.
No caso do programa acima, primeiro existe a declaração da variável ‘lista’ contendo a leitura de um arquivo chamado ‘listas.txt’, dentro do diretório /root. Dentro deste arquivo, será criada uma lista com os usuários e grupos na estrutura &lt;usuário&gt;:&lt;grupo&gt; .
O for irá processar cada linha dessa lista de cada vez, atribuindo seus valores à variável usr, uma linha por vez, isto significa que se a primeira linha do arquivo for joao:cpd, o primeiro valor da variável usr será este e o próximo valor será o valor da segunda linha e assim por diante.
As variáveis login e grupo “pegam” os campos 1 e 2 do “print” da variável usr, tendo como separador de campo o caractere : .



Agora é só aplicar os dados no comando useradd :



Criando o arquivo de lista de usuários:

Executando o Script:

#chmod +x /usr/local/bin/cria_usr.sh

#cria_usr.sh



BLOQUEIO A UMA LISTA DE DOMÍNIOS

Neste caso, temos um arquivo com uma lista de domínios que receberão regras de bloqueio na chain FORWARD da tabela Filter do Iptables. Isso significa que pacotes que passarem pelo firewall e que tiverem como destino estes domínios serão negados.

Vamos à lista:

#vim /root/lista_dom.txt



Criando o script:

#vim /usr/local/sbin/block_dom.sh



Executando o script:

#chmod +x /usr/local/sbin/block_dom.sh

#block_dom.sh

Conferindo as regras:

#iptables -nvL


Todos os pacotes oriundos da rede 10.10.10.0/24 e com destino a qualquer IP dos domínios contidos na lista, serão rejeitados pelo Firewall.
Neste caso, quando o administrador quiser bloquear uma lista de domínios ou IPs, basta incluí-los no arquivo /root/lista_dom.txt e executar novamente o script em questão.