Introdução
Neste laboratório, vamos explorar as funções shell no Linux. Funções shell são blocos de código reutilizáveis que executam tarefas específicas, tornando nossos scripts mais organizados e eficientes. Aprenderemos como criar, chamar e utilizar funções com parâmetros em scripts shell. Este laboratório foi projetado para iniciantes, por isso avançaremos passo a passo e explicaremos cada conceito detalhadamente.
Criando Sua Primeira Função Shell
Vamos começar criando uma função shell simples. Funções shell funcionam como mini-scripts dentro de um script maior, permitindo agrupar comandos que realizam uma tarefa específica.
Primeiro, precisamos criar um novo arquivo. Abra seu terminal e digite:
cd ~/project
touch functions.sh
Este comando acessa o diretório project e cria um novo arquivo chamado functions.sh. Este arquivo conterá nossas funções shell.
Agora, vamos adicionar nossa primeira função:
#!/bin/bash
## This is a simple function
greet() {
echo "Hello, World!"
}
## This line calls (runs) the function
greet
Vamos analisar o código:
- A primeira linha
#!/bin/bashé chamada de shebang. Ela instrui o sistema a usar o bash para interpretar este script. - Definimos nossa função com
greet() { }. Tudo o que estiver entre as chaves faz parte da função. - Dentro da função, temos um comando
echosimples que imprime "Hello, World!". - A última linha
greetchama (executa) nossa função.
Agora, vamos tornar nosso script executável e rodá-lo:
chmod +x functions.sh
./functions.sh
Você deverá ver:
Hello, World!
Se você não vir essa saída, verifique se digitou tudo corretamente no arquivo functions.sh.
Funções com Parâmetros
Agora que criamos uma função básica, vamos torná-la mais flexível adicionando parâmetros. Os parâmetros nos permitem passar informações para dentro de nossas funções.
Abra o arquivo functions.sh novamente e substitua o conteúdo pelo seguinte código:
#!/bin/bash
## Function with a parameter
greet() {
echo "Hello, $1!"
}
## Function with multiple parameters
calculate() {
echo "The sum of $1 and $2 is $(($1 + $2))"
}
## Call functions with arguments
greet "Alice"
calculate 5 3
Vamos examinar este código:
- Na função
greet,$1refere-se ao primeiro argumento passado para a função. - Na função
calculate,$1e$2referem-se ao primeiro e segundo argumentos, respectivamente. $(($1 + $2))realiza a adição aritmética dos dois parâmetros.
Execute o script:
./functions.sh
Você deverá ver:
Hello, Alice!
The sum of 5 and 3 is 8
Se não visualizar essa saída, certifique-se de ter salvo as alterações no arquivo corretamente.
Valores de Retorno de Funções
No shell scripting, as funções não retornam valores da mesma forma que em outras linguagens de programação. Em vez disso, elas podem exibir um resultado via echo (que pode ser capturado) ou modificar uma variável global. Vamos explorar ambos os métodos.
Abra o functions.sh novamente e atualize o conteúdo com o seguinte código:
#!/bin/bash
## Function that echoes a result
get_square() {
echo $(($1 * $1))
}
## Function that modifies a global variable
RESULT=0
set_global_result() {
RESULT=$(($1 * $1))
}
## Capture the echoed result
square_of_5=$(get_square 5)
echo "The square of 5 is $square_of_5"
## Use the function to modify the global variable
set_global_result 6
echo "The square of 6 is $RESULT"
Vamos detalhar o que acontece:
- A função
get_squareusa oechopara enviar o resultado para a saída, que capturamos usando a sintaxe$(). - A função
set_global_resultmodifica diretamente a variável globalRESULT. - Usamos
$()para capturar a saída deget_squareem uma variável. - Chamamos
set_global_result, que alteraRESULT, e então imprimimos o valor deRESULT.
Salve o arquivo e execute-o:
./functions.sh
Você deverá ver:
The square of 5 is 25
The square of 6 is 36
Se não vir este resultado, verifique se há erros de digitação no seu arquivo functions.sh.
Entendendo o Escopo de Variáveis
Em scripts shell, as variáveis são globais por padrão. Isso significa que podem ser acessadas de qualquer lugar do script. No entanto, você pode usar a palavra-chave local para criar variáveis que sejam acessíveis apenas dentro de uma função. Isso é chamado de escopo local.
Vamos modificar nosso arquivo functions.sh para demonstrar este conceito.
Atualize o conteúdo com o código abaixo:
#!/bin/bash
## Global variable
GLOBAL_VAR="I'm global"
## Function with a local variable
demonstrate_scope() {
local LOCAL_VAR="I'm local"
echo "Inside function: GLOBAL_VAR = $GLOBAL_VAR"
echo "Inside function: LOCAL_VAR = $LOCAL_VAR"
}
## Call the function
demonstrate_scope
echo "Outside function: GLOBAL_VAR = $GLOBAL_VAR"
echo "Outside function: LOCAL_VAR = $LOCAL_VAR"
Eis o que está acontecendo neste script:
- Definimos uma variável global
GLOBAL_VAR. - Dentro da função
demonstrate_scope, definimos uma variável localLOCAL_VARusando a palavra-chavelocal. - Imprimimos ambas as variáveis dentro da função.
- Após chamar a função, tentamos imprimir ambas as variáveis novamente fora dela.
Salve o arquivo e execute-o:
./functions.sh
Você deverá ver uma saída semelhante a esta:
Inside function: GLOBAL_VAR = I'm global
Inside function: LOCAL_VAR = I'm local
Outside function: GLOBAL_VAR = I'm global
Outside function: LOCAL_VAR =
Observe que LOCAL_VAR está vazia quando acessada fora da função. Isso ocorre porque variáveis locais só existem dentro da função onde foram definidas.
Função Avançada - ENGLISH_CALC
Agora que cobrimos o básico das funções shell, vamos criar uma função mais avançada chamada ENGLISH_CALC. Esta função receberá três argumentos: dois números e uma operação (plus, minus ou times).
Substitua o conteúdo pelo seguinte código:
#!/bin/bash
ENGLISH_CALC() {
local num1=$1
local operation=$2
local num2=$3
local result
case $operation in
plus)
result=$((num1 + num2))
echo "$num1 + $num2 = $result"
;;
minus)
result=$((num1 - num2))
echo "$num1 - $num2 = $result"
;;
times)
result=$((num1 * num2))
echo "$num1 * $num2 = $result"
;;
*)
echo "Invalid operation. Please use 'plus', 'minus', or 'times'."
return 1
;;
esac
}
## Test the function
ENGLISH_CALC 3 plus 5
ENGLISH_CALC 5 minus 1
ENGLISH_CALC 4 times 6
ENGLISH_CALC 2 divide 2 ## This should show an error message
Vamos analisar esta função:
- Usamos variáveis
localpara armazenar nossas entradas e resultados. Esta é uma boa prática para evitar interferência com variáveis globais. - Usamos uma instrução
casepara lidar com diferentes operações. Isso é semelhante ao comando switch em outras linguagens. - Para cada operação válida, realizamos o cálculo e exibimos o resultado.
- Se uma operação inválida for fornecida, exibimos uma mensagem de erro e retornamos 1 (em scripts shell, um valor de retorno diferente de zero indica um erro).
- Ao final, testamos nossa função com várias entradas, incluindo uma operação inválida.
Salve o arquivo e execute-o:
./functions.sh
Você deverá ver a seguinte saída:
3 + 5 = 8
5 - 1 = 4
4 * 6 = 24
Invalid operation. Please use 'plus', 'minus', or 'times'.
Se não visualizar este resultado, verifique se há erros de digitação no seu arquivo functions.sh.
Resumo
Neste laboratório, exploramos as funções shell no Linux, partindo do básico e progredindo para conceitos mais avançados. Aprendemos como:
- Criar e chamar funções simples.
- Trabalhar com parâmetros de função.
- Retornar valores de funções usando echo e variáveis globais.
- Entender o escopo de variáveis e usar variáveis locais.
- Criar uma função mais complexa que processa operações aritméticas.
As funções shell são ferramentas poderosas que ajudam a escrever códigos mais organizados, eficientes e reutilizáveis. Elas permitem dividir scripts complexos em partes menores e gerenciáveis, facilitando a compreensão e a manutenção.
Ao dominar as funções shell, você será capaz de escrever scripts mais sofisticados e automatizar tarefas complexas de forma mais eficaz em um ambiente Linux. Lembre-se, a prática é fundamental para se tornar proficiente em shell scripting. Tente modificar as funções que criamos ou crie as suas próprias para resolver problemas específicos que encontrar no seu dia a dia com Linux.



