Como usar as funções em Bash

Suraj Joshi 30 janeiro 2023
  1. Definir Funções em Bash
  2. Escopo das Variáveis em Bash
  3. Retornar valores da função em Bash
  4. Passar Argumentos para uma Função Bash
Como usar as funções em Bash

Uma função é um dos aspectos mais importantes de toda linguagem de programação, e torna nosso código reutilizável e legível. O mesmo código usado repetidas vezes é escrito dentro de uma função. E quando precisamos do bloco de código, simplesmente chamamos a função definida.

Definir Funções em Bash

Para definir funções em Bash, podemos usar qualquer uma das duas abordagens a seguir:

Nesta abordagem, escrevemos o nome da função seguido de parênteses. Em seguida, definimos as funções dentro dos suportes de encaracolar. As funções usando este formato podem ser definidas usando qualquer um dos formatos:

function_name(){
statements
}
function_name() { statements }

Nesta abordagem, especificamos a palavra-chave function antes do nome da função.

function_name(){
statements
}
function_name() { statements }

As afirmações dentro das chaves encaracoladas determinam o que a função faz. O nome da função não tem nada a ver com o que a função faz, mas devemos tornar os nomes das funções descritivos. A definição da função não fará nada. Para executar os comandos na definição da função, devemos chamar a função.

Para chamar a função em Bash, utilizamos o nome da função.

#! /bin/bash

greet(){
    echo 'Hello, Folks. Welcome to DelftStack!'
}

greet

Resultado:

Hello, Folks. Welcome to DelftStack!

Aqui, definimos a função no início com o nome greet e depois chamamos a função. Quando chamamos a função, as afirmações dentro de uma definição de função são executadas e, portanto, vemos Hello, Folks. Welcome to DelftStack! impresso no terminal.

Também podemos definir a função utilizando outra abordagem como:

#! /bin/bash

function greet(){
    echo 'Hello, Folks. Welcome to DelftStack!'
}

greet

Resultado:

Hello, Folks. Welcome to DelftStack!

Devemos ter certeza de que sempre definimos a função antes de chamá-la.

Escopo das Variáveis em Bash

O escopo das variáveis pode ser global ou local em Bash, assim como de outras linguagens de programação. Entretanto, o escopo padrão das variáveis é sempre global, mesmo que seja declarado dentro do escopo da função. Devemos utilizar a palavra-chave local para tornar uma variável local.

#! /bin/bash

gvar1=1
gvar2=2

change_variables() {

    local gvar1=10
    gvar2=7
    
    echo "Inside Function: gvar1: $gvar1, gvar2: $gvar2"
}

echo "Before executing function: gvar1: $gvar1, gvar2: $gvar2"

change_variables

echo "After executing function: gvar1: $gvar1, gvar2: $gvar2"

Resultado:

Before executing function: gvar1: 1, gvar2: 2
Inside Function: gvar1: 10, gvar2: 7
After executing function: gvar1: 1, gvar2: 7

Aqui, gvar1 e gvar2 declaradas no topo são variáveis globais.

Dentro da função, gvar1 é declarada como uma variável local uma vez que utilizamos a palavra-chave local com gvar1 enquanto gvar2 ainda se refere a uma variável global uma vez que não tem uma palavra-chave local. Portanto, o valor de gvar2 é alterado globalmente pela função enquanto que o valor de gvar1 é alterado apenas dentro da função.

Retornar valores da função em Bash

Ao contrário de outras linguagens de programação, Bash não nos permite retornar valores da função. O valor retornado da função Bash é o status da última declaração executada na função. O número 0 representa o sucesso, enquanto o número de 1-255 representa o fracasso. Podemos especificar o status de saída da função utilizando a palavra-chave return. A declaração return também encerra a função.

#! /bin/bash

return_value(){
  echo "This function returns 20!"
  return 30
  echo "After return statement"
}

return_value
echo $?

Resultado:

This function returns 20!
30

Aqui, podemos ver que a função return_value retorna o valor 30 utilizando a instrução return, e o valor é atribuído à variável $?.

Também podemos observar que a função é encerrada após a instrução return ser executada, pois os comandos abaixo da instrução return não são executados.

Se quisermos retornar algum valor de uma função, podemos atribuir o valor a uma variável global e acessar a variável de fora da função para recuperar o valor.

#! /bin/bash

send_message(){
  message_from_function="Hello From the function!"
}
send_message
echo $message_from_function

Resultado:

Hello From the function!

No programa, atribuímos o valor a ser retornado à variável global message_from_function e então acessamos o valor retornado da variável.

Passar Argumentos para uma Função Bash

Para passar argumentos para uma função Bash, nós simplesmente colocamos os argumentos após a função. Se quisermos passar mais de um argumento para uma função, separamos os argumentos por um espaço. Para evitar o desajuste dos argumentos, podemos embrulhar os argumentos em aspas duplas.

Os parâmetros são acessados com $1 $2 e assim por diante, com base em sua posição. $0 representa o nome da função enquanto $# contém o número de argumentos posicionais na função.

#! /bin/bash

send_message(){
  message_from_function="Hello $1 "
}
send_message
echo $message_from_function "Delft!"

Resultado:

Hello Delft!

Aqui, o argumento Delft! é passado para a função e acessado na função pelo parâmetro $1, e obtemos Hello Delft! como a saída final da função.

Suraj Joshi avatar Suraj Joshi avatar

Suraj Joshi is a backend software engineer at Matrice.ai.

LinkedIn