Aula 13 — Reutilize código de forma inteligente: crie blocos reutilizáveis, passe parâmetros e organize seus scripts com funções
Uma função é um bloco de código reutilizável que executa uma tarefa específica. Você a define uma vez e pode chamá-la quantas vezes precisar, passando diferentes valores (parâmetros) a cada chamada.
No Bash existem duas formas equivalentes de declarar uma função. Ambas funcionam da mesma maneira; a primeira é a mais comum em scripts modernos.
⚠️ Regra importante: sempre defina a função antes de chamá-la! O Shell lê o script de cima para baixo — chamar uma função antes de defini-la causa erro.
Funções podem receber valores de entrada chamados parâmetros. Eles são acessados pelas variáveis especiais $1, $2, etc., da mesma forma que argumentos de script.
| Variável | Significado |
|---|---|
$1 | Primeiro parâmetro |
$2 | Segundo parâmetro |
$3 | Terceiro parâmetro |
$@ | Todos os parâmetros |
$# | Quantidade de parâmetros recebidos |
Funções podem realizar operações aritméticas com $(( )) e retornar o resultado via echo. Para capturar o valor impresso por uma função, use a substituição de comando $(funcao).
💡 $(funcao arg1 arg2) executa a função e captura o que ela imprime com echo. Use este padrão para armazenar resultados: TOTAL=$(somar 10 5).
Funções podem usar read internamente para coletar dados do usuário, encapsulando toda a lógica de interação em um bloco reutilizável.
💡 read -s oculta o texto digitado — essencial para senhas. read -sp "texto" combina prompt e modo silencioso em uma só opção.
No Bash, funções podem “retornar” de duas formas distintas dependendo do objetivo: return para códigos de status e echo para valores de texto.
return — código de saída (0–255)echo — retornar valores de texto📌 Quando usar cada um: return para indicar sucesso/falha (use em if funcao); echo para devolver valores — capture com VAR=$(funcao).
localPor padrão, variáveis criadas dentro de uma função são globais e podem interferir no restante do script. A palavra-chave local restringe a variável ao escopo da função.
local — altera o globallocal — preserva o global💡 Use local em todas as variáveis internas de funções. Isso evita efeitos colaterais imprevisíveis e torna o script mais previsível e fácil de depurar.
sourceÉ possível organizar funções em arquivos separados e importá-las em qualquer script com source ou o atalho . (ponto). Isso cria uma biblioteca de funções reutilizável.
funcoes.shmain.sh📌 source e . (ponto) fazem exatamente a mesma coisa. Os arquivos devem estar no mesmo diretório ou use o caminho completo: source /opt/scripts/funcoes.sh.
Combinação de while true + case + funções: cada opção do menu chama uma função específica, tornando o código organizado e fácil de expandir.
📋 Checklist: nomes descritivos • use local para variáveis internas • defina sempre antes de chamar • uma tarefa por função • documente parâmetros nos comentários.
Relacione cada elemento de funções à sua descrição.
$1
local
source
return
$#
$(funcao)
calculadora.sh com quatro funções: somar, subtrair, multiplicar e dividir. Cada uma recebe dois parâmetros e exibe o resultado. Teste com pelo menos 3 chamadas de cada função.local e returnvalidar.sh com uma função verificar_numero que use local para variáveis internas e return 0 se o parâmetro for um número positivo ou return 1 se for negativo ou zero. Use a função em um if.lib.sh com funções de utilidade: linha_separadora (imprime 40 hífens), cabecalho TITULO (imprime título entre linhas) e log MENSAGEM (imprime com data/hora). Importe em main.sh com source e use as três funções.sistema.sh com funções separadas para: exibir o menu, mostrar informações do sistema (uname -a, uptime), listar usuários logados (who) e verificar espaço em disco (df -h). Use while true + case para chamar cada função.source, você tem as ferramentas para construir sistemas Shell Script profissionais e de fácil manutenção.
Como declarar uma função em Bash?
nome() { ... } e function nome { ... }. A primeira é mais portável entre shells.Como acessar o primeiro argumento passado para uma função Bash?
$1, $2... são os argumentos da função (não do script). $# é a quantidade de argumentos recebidos.O que faz local variavel=valor dentro de uma função?
local limita o escopo da variável à função — boa prática para evitar conflitos com variáveis globais de mesmo nome.Como fazer uma função retornar um valor calculado para ser capturado em uma variável?
return só retorna códigos de saída (0-255). Para retornar strings ou números calculados, use echo na função e capture com var=$(funcao).