Funções em Shell Scripting, parte 1: Introdução e declarando funções

Esse artigo / resumo / matéria / tutorial / apostila tem por objetivo dar uma 'geral' no assunto Funções em Shell Scripting, em sistemas Unix. 
Tal assunto é de uma abrangência vasta, sendo impossível explicar tudo em um artigo, mesmo que eu colasse aqui o 'man', ou documentação, de cada arquivo/comando. 
Um conhecimento maior só virá com o estudo de várias fontes, leitura de outros scripts e trocando informações com outros programadores.
Portanto, tome este material como referência. Através dele você terá uma noção sobre o assunto Funções em Shell Scripting, para que servem, como usá-las, além de conhecer algumas ferramentas e comandos.


Quem já estudou outra linguagem de programação sabe o que são funções ou, como são muitas vezes chamadas, subrotinas.

Resumidamente, são um bloco de comandos que, geralmente, recebem dados, fazem a manipulação destes através das instruções e devolvem algum resultado.
As vezes não retornam nada, mas fazem algum tipo de mudança no seu script, nem que seja uma simples exibição de texto.

Quem escreve muitos códigos em shell scripting sabe que repetimos muitos comandos e instruções.
Escrevendo, definindo e salvando as funções de maneira que estas sejam bem simples e executem uma tarefa bem específica é uma boa prática para evitar a repetição na escrita de código, pois podemos sempre reutilizar estas funções.
Assim, quando for iniciar um projeto, já terá boa parte deste feito, em forma de funções.

- Declarando funções

Em Shell, as funções tem a cara:

funcao ()
{
#bloco de instruções. Tudo entre {} é executado de uma vez
}

Diferente de algumas linguagens de programação, as variáveis internas a uma função são visíveis fora desta (em suma, por padrão, as variáveis são locais, a menos que as declare como 'local'):

{ texto="Oi, sou uma função anônima" ; }
echo $texto

Note que, após cada comando dentro do escopo das funções, usamos ';'
listar () { texto="listando items" ; echo $texto ; ls ; }

Para declarar a função, digite no terminal:
declare -f listar

Caso deseje expandir os comandos, o bash irá interpretar a quebra de linha, não sendo necessário o ';' :
listar()
{
  texto="listando items"
  echo $texto
  ls
}

*Importante: após a primeira chaves, {, dê espaço!
listar() {ls;} -> ERRADO
listar() { ls;}-> CERTO

Após criar e declarar a função, para chamá-la simplesmente digite o nome dela, como se fosse um comando, no terminal:
listar

Note que isso só funcionará na instância do shell em que você declarou a função.


Como na maioria das linguagens, você precisa declarar a função antes de usá-la (em Perl não, por exemplo, você pode declarar até num pedaço de papel que o Perl reconhece).

Vamos testar no script 'hello':
--------
#!/bin/bash

hello()
{
   echo "Hello, World"
}

goodbye()
{
   echo "Goodbye, World"
}

hello
goodbye
--------

Execute e sinta a magia no ar:
chmod +x hello
./hello


Leia o artigo "Processos", insira 'exit 0' ao final da função hello(), veja e analise o resultado.

Nenhum comentário:

Veja também: