Unix / Linux - Funções Shell

Neste capítulo, discutiremos em detalhes sobre as funções do shell. As funções permitem que você divida a funcionalidade geral de um script em subseções lógicas menores, que podem então ser chamadas para executar suas tarefas individuais quando necessário.

Usar funções para realizar tarefas repetitivas é uma excelente maneira de criar code reuse. Esta é uma parte importante dos princípios modernos de programação orientada a objetos.

As funções do shell são semelhantes a sub-rotinas, procedimentos e funções em outras linguagens de programação.

Criação de funções

Para declarar uma função, basta usar a seguinte sintaxe -

function_name () { 
   list of commands
}

O nome da sua função é function_name, e é isso que você usará para chamá-lo de qualquer lugar em seus scripts. O nome da função deve ser seguido por parênteses, seguido por uma lista de comandos entre colchetes.

Exemplo

O exemplo a seguir mostra o uso da função -

#!/bin/sh

# Define your function here
Hello () {
   echo "Hello World"
}

# Invoke your function
Hello

Após a execução, você receberá a seguinte saída -

$./test.sh
Hello World

Passar parâmetros para uma função

Você pode definir uma função que aceitará parâmetros ao chamar a função. Esses parâmetros seriam representados por$1, $2 e assim por diante.

A seguir está um exemplo onde passamos dois parâmetros Zara e Ali e depois capturamos e imprimimos esses parâmetros na função.

#!/bin/sh

# Define your function here
Hello () {
   echo "Hello World $1 $2"
}

# Invoke your function
Hello Zara Ali

Após a execução, você receberá o seguinte resultado -

$./test.sh
Hello World Zara Ali

Retornando valores de funções

Se você executar um exit comando de dentro de uma função, seu efeito não é apenas encerrar a execução da função, mas também do programa shell que chamou a função.

Se, em vez disso, você quiser apenas encerrar a execução da função, há uma maneira de sair de uma função definida.

Com base na situação, você pode retornar qualquer valor de sua função usando o return comando cuja sintaxe é a seguinte -

return code

Aqui code pode ser qualquer coisa que você escolher aqui, mas obviamente você deve escolher algo que seja significativo ou útil no contexto do seu script como um todo.

Exemplo

A função a seguir retorna um valor 10 -

#!/bin/sh

# Define your function here
Hello () {
   echo "Hello World $1 $2"
   return 10
}

# Invoke your function
Hello Zara Ali

# Capture value returnd by last command
ret=$?

echo "Return value is $ret"

Após a execução, você receberá o seguinte resultado -

$./test.sh
Hello World Zara Ali
Return value is 10

Funções Aninhadas

Uma das características mais interessantes das funções é que elas podem chamar a si mesmas e também a outras funções. Uma função que chama a si mesma é conhecida comorecursive function.

O exemplo a seguir demonstra o aninhamento de duas funções -

#!/bin/sh

# Calling one function from another
number_one () {
   echo "This is the first function speaking..."
   number_two
}

number_two () {
   echo "This is now the second function speaking..."
}

# Calling function one.
number_one

Após a execução, você receberá o seguinte resultado -

This is the first function speaking...
This is now the second function speaking...

Chamada de função do prompt

Você pode colocar definições para funções comumente usadas dentro de seu .profile. Essas definições estarão disponíveis sempre que você efetuar login e você pode usá-las no prompt de comando.

Alternativamente, você pode agrupar as definições em um arquivo, digamos test.she, em seguida, execute o arquivo no shell atual digitando -

$. test.sh

Isso tem o efeito de causar funções definidas dentro test.sh para ser lido e definido para o shell atual da seguinte forma -

$ number_one
This is the first function speaking...
This is now the second function speaking...
$

Para remover a definição de uma função do shell, use o comando unset com o .fopção. Este comando também é usado para remover a definição de uma variável do shell.

$ unset -f function_name