Shell Scripting – Criando Funções em scripts

Shell Scripting - Criando Funções em scripts

Conforme começamos a criar scripts do shell mais complexos, acabaremos invariavelmente reusando partes do código que realizam tarefas específicas.

Algumas vezes são tarefas simples, como exibir uma mensagem para o usuário, e outras vezes serão tarefas muito complexas, com trechos de código longos.

Podemos evitar a reescrita de trechos de código que necessitem ser reusados usando Funções, de modo que só escrevemos o trecho de um código específico uma vez - e sempre que precisarmos repeti-lo, apenas fazemos uma chamada à função requisitada.

Como criar uma função em Shell Scripting

Há duas formas para criarmos uma função em shell scripting. A primeira usa a palavra-chave function, cuja sintaxe é como segue:

function nome_função {
  comandos da função
}

Onde nome_função se refere ao nome que iremos escolher para chamar a função quando necessário. Já os comandos da função são comandos do shell bash que serão executados quando a função for chamada.

A segunda forma de criarmos uma função não usa a palavra function, e opera com a sintaxe a seguir:

nome_função() {
  comandos da função
}

Os parênteses vazios após nome_função indicam que estamos definindo uma função.

Para usarmos uma função criada, basta especificar seu nome em uma linha dentro de um script, como um comando comum.

Vejamos um exemplo simples:

Vamos criar uma função que escreva a mensagem "Bóson Treinamentos" dez vezes na tela, e inseri-la em um script de nome teste-func.sh:

#!/bin/bash
# Função em um script do shell
function mensagem {
  echo "Bóson Treinamentos"
}
# Chamando a função dez vezes usando um contador:
contador=1
while [ $contador -le 10 ]
do
  mensagem
  contador=$[ contador + 1 ]
done
# Outro texto, indicando o fim do script:
echo "Função executada com sucesso!"

Após dar permissão de execução ao arquivo e executar o script, temos o seguinte resultado:

Criando uma função em shell script no linux

Idealmente, devemos definir as funções logo no início do script, mas isso não é obrigatório. Porém, uma função não pode ser chamada sem antes ter sido definida.
Outro ponto importante a se lembrar é que cada função deve ter um nome único - não crie duas funções com o mesmo nome dentro de um script.

Retornando valores de uma função

O shell bash trata as funções como se fossem mini-scripts, completos inclusive com um status de saída. Podemos gerar status de saída e retornar valores para as funções de três maneiras diferentes:

1. O status de saída padrão

Por padrão, o status de saída de uma função é o status que é retornado pelo último comando executado dentro da função. Após a função terminar, podemos acessar esse status por meio da variável $? para verificar seu valor - o qual será o status de saída da função em si.

Veja o exemplo no script abaixo:

#!/bin/bash
# Verificando o status de saída da função
func-status() {
ls -la /home
}
# chamando a função
func-status
# Exibindo o valor do status de saída da função:
echo "O status de saída da função é $?"

Rodando o script obtemos o seguinte resultado:

Executando funções via shell scripting no linux

O status de saída de nosso exemplo foi 0 porque o último (e único) comando de nossa função funcionou perfeitamente. Porém, se a função tiver múltiplos comandos, e algum deles falhar, sem que seja o último, o status retornado ainda será o 0. Podemos resolver esse problema usando o comando return, como veremos a seguir.

2. O comando return

O comando return nos permite especificar um valor inteiro para definir o status de saída da função, de modo a não dependermos do último comando executado dentro da função.

Veja o exemplo:

#!/bin/bash
# Usando o comando return em uma função
function quadrado {
  read -p "Digite um número entre 2 e 10: " valor
  echo "Vamos calcular o quadrado do número digitado"
  return $[ $valor * $valor ]
}
# chamando a função
quadrado
# verificando o status de saída
echo "status de saída da função: $?"

Executando o script temos:

Funções em shell script no Linux

O status da função retornado agora é o valor retornado pelo comando return.
Ao usar o comando return em uma função, tome cuidado com o seguinte:

  • O valor do status de saída deve ser capturado assim que a função terminar, para não perdê-lo caso outra instrução seja executada.
  • Os status de saída somente podem ser valores entre 0 e 255.

3. Usando a saída da função

Podemos capturar a saída de uma função em uma variável do shell. para isto, basta atribuir a função a uma variável. Note o uso de backticks (crases) na declaração:

statusValor=`função`

Vejamos um exemplo:

#!/bin/bash
# Function Output
function quadrado {
  read -p "Digite um número entre 2 e 10: " numero
  echo $[ $numero * $numero ]
}
# atribuindo o valor da função à variável do shell valor
valor=`quadrado`
# mostrando o valor:
echo "O valor é $valor"

Executando o script:

Como criar funções em scripts do shell no Linux

Note que agora não há mais a limitação de valor entre 0 e 255.
Com essa técnica, também podemos retornar valores de string e ponto flutuante. É uma ótima técnica para retornar valores de funções.

No próximo artigo mostraremos como usar variáveis em funções de Shell Scripting. Enquanto isso, assista a um vídeo da Bóson Treinamento em Tecnologia sobre funções em scripts do shell:

 

Sobre Fábio dos Reis (1262 Artigos)
Fábio dos Reis trabalha com tecnologias variadas há mais de 25 anos, tendo atuado nos campos de Eletrônica, Telecomunicações, Programação de Computadores e Redes de Dados. É um entusiasta de Unix, Linux e Open Source em geral, adora Eletrônica e Música, e estuda idiomas, além de ministrar cursos e palestras sobre diversas tecnologias em São Paulo e outras cidades do Brasil.
Contato: Website

2 Comentários em Shell Scripting – Criando Funções em scripts

  1. Material excelente!

    Gostei do site e agora recomendo.

    Parabéns pelo trabalho.

    Abraço.

Escreva um comentário

Seu e-mail não será divulgado


*