Linux slogan
Visite também: Segurança Linux · BR-Linux.org · Dicas-L · Doode · NoticiasLinux · SoftwareLivre.org · UnderLinux



» Screenshot
Linux: Debian & KDE :D
Por RaXiD
» Login
Login:
Senha:

Se você ainda não possui uma conta, clique aqui.

Esqueci minha senha



Artigo

Como trabalhar com funções em bash
Linux user
thuck
03/07/2008
Pretendo deixar mais claro como utilizar funções em shell, também pretendo abordar temas como retorno da função, declaração de constantes, variáveis locais, variáveis globais, argumentos para as funções etc. Espero que essa contribuição possa ajudar algumas pessoas no futuro.
Por: Denis Doria
[ Hits: 22144 ]
Conceito: 10.0   2 voto(s)2 voto(s)2 voto(s)2 voto(s)2 voto(s) + quero dar nota ao artigo

Introdução

Pretendo deixar mais claro como utilizar funções em shell, também pretendo abordar temas como retorno da função, declaração de constantes, variáveis locais, variáveis globais, argumentos para as funções etc.

Espero que essa contribuição possa ajudar algumas pessoas no futuro. Todos os testes e exemplos mostrados aqui foram feitos em:

Debian GNU/Linux SID
Bash version 3.1.17

O que são funções

Função nada mais é que um código escrito para resolver uma pequena parte de um problema, o que resolve o problema por inteiro é chamado de software, o que faz pequenas coisas em um software são as funções.

Uma coisa que não está na definição acima é que a função é sempre encapsulada, ou seja, ela tem uma estrutura própria que varia de linguagem para linguagem, porém normalmente segue uma forma mais ou menos parecida em todas estas.

Como declarar e usar uma função dentro de um shell script

Para se criar uma função dentro de um shell script basta fazer:

function minha_funcao(){ echo 'minha funcao'; }

Com esta declaração criamos uma função chamada "minha função", como pode ser visto ela apenas imprime a frase 'minha funcao'.

A palavra "function" que precede o nome da função é opcional, porém para melhor visualização é sempre interessante mantê-la, afinal escrever está pequena palavra não atrapalhará a sua vida, mas facilitará na hora de rever o script.

Após isso, para usar a função basta colocar no seu script o nome dela:

minha_funcao

Não use '()' quando chamá-la, para o bash a função é como um comando, e esse é o motivo de apenas usarmos o nome, e não como na maioria das linguagens acabamos usando 'minha_funcao(args)'.

Um ponto importante é que a função deve ser declarada antes de ser usada, algumas linguagens deixam que a função esteja em qualquer lugar do código, em shell ela sempre deve vir antes da primeira utilização, por motivos de organização deixe as funções no começo do script, não crie funções no meio, nem no fim, coloque-as sempre no começo, essa é com certeza uma boa prática.

Vamos testar e ver o resultado:

$ function minha_funcao(){ echo 'minha funcao'; }
$ minha_funcao

minha funcao

Tudo funcionou como imaginávamos, agora vamos ver como o bash armazenou a função:

minha_funcao ()
{
   echo 'minha funcao'
}

Como pode ser visto, ele criou uma estrutura sem o 'function' precedendo o nome da função, e também inseriu quebras de linhas.

Próxima página >>




Páginas do artigo

Outros artigos deste autor

Leitura recomendada

Comentários
[1] Comentário enviado por ux386 em 03/07/2008 - 22:50h:

>A primeira coisa que pensei foi em fazer um SORT=$(which sort), essa é a melhor
> solução que encontrei para esse problema.

Assim como existe o "builtin" que podemos usar quando uma função sobrescreve um builtin,
existe também o "command", que sempre chama um comando externo, mesmo que haja uma
função com o mesmo nome.

# uname() { echo "Função."; }
# uname -r
Função.
# command uname -r
2.6.18-4-686

[2] Comentário enviado por arauto em 03/07/2008 - 22:56h:

Legal, o artigo, são dicas que valem a pena saber e recordar.

[3] Comentário enviado por roberva em 04/07/2008 - 15:02h:

Como o outro, muito bom.
Parabéns amigo pelo conteúdo do ótimo artigo!

[4] Comentário enviado por thuck em 04/07/2008 - 15:18h:

Obrigado ux386 pelo comentário, realmente o que vc mostrou funciona muito bem.

Obrigado pelos comentários até agora.

[5] Comentário enviado por albathross em 17/05/2011 - 11:37h:

Denis, excelente artigo.

Durante a leitura, surgiu a dúvida neste trecho do artigo:

...

Tudo funcionou como imaginávamos, agora vamos ver como o bash armazenou a função:

minha_funcao ()
{
echo 'minha funcao'
}

...


Saí em busca para sanar a dúvida e encontrei a opção -f do comando declare.
declare. -f "nome da função".

Veja na sequência de comandos:

user@debianMachine:~/shell/funções$ function minha_funcao(){ echo 'minha funcao'; }
user@debianMachine:~/shell/funções$ minha_funcao
minha funcao
user@debianMachine:~/shell/funções$ declare -f minha_funcao
minha_funcao ()
{
echo 'minha funcao'
}


Fonte:
http://unix.derkeiler.com/Newsgroups/comp.unix.solaris/2007-04/msg00957.html
http://www.linuxtopia.org/online_books/advanced_bash_scripting_guide/declareref.html



Contribuir com comentário


  
Para executar esta ação você precisa estar logado no site, caso contrário, tudo o que for digitado será perdido.
Responsável pelo site: Fábio Berbert de Paula - Conteúdo distribuído sob licença GNU FDL
Site hospedado por:

Viva o Linux

A maior comunidade Linux da América Latina! Artigos, dicas, tutoriais, fórum, scripts e muito mais. Ideal para quem busca auto-ajuda em Linux.