Quem já estudou outra linguagem de programação, sabe o que são funções ou, como são muitas vezes chamadas, sub-rotinas.
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. Às 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, por padrão, as variáveis internas a uma função são visíveis fora desta:
{ 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.