Android

Funções Bash

20 Bash Tricks in 5 Minutes - Spencer Krum

20 Bash Tricks in 5 Minutes - Spencer Krum

Índice:

Anonim

Uma função Bash é essencialmente um conjunto de comandos que podem ser chamados várias vezes. O objetivo de uma função é ajudá-lo a tornar seus scripts bash mais legíveis e evitar escrever o mesmo código repetidamente.

Comparadas à maioria das linguagens de programação, as funções do Bash são um pouco limitadas. Neste tutorial, abordaremos o básico das funções do Bash e mostraremos como usá-las em seus scripts de shell.

Declaração da função Bash

A sintaxe para declarar uma função bash é muito simples. Eles podem ser declarados em dois formatos diferentes:

  1. O primeiro formato começa com o nome da função, seguido por parênteses. Este é o formato preferido e mais usado.

    function_name () { commands }

    Versão de linha única:

    function_name () { commands; }

    O segundo formato começa com a palavra reservada da function seguida pelo nome da função.

    function function_name { commands }

    Versão de linha única:

    function function_name { commands; }

Alguns pontos a serem observados:

  • A lista de comandos entre chaves {} é o corpo da função. Os colchetes que envolvem o corpo da função devem ser separados do corpo por espaços ou novas linhas. Definir uma função não a executa. Para invocar uma função bash, basta usar o nome da função. Os comandos entre os chavetas são executados sempre que a função é chamada no script shell. A definição da função deve ser colocada antes de qualquer chamada para a função. Ao usar funções “compactadas” de linha única, um ponto ; vírgula ; deve seguir o último comando da função. Você deve sempre tentar manter os nomes de suas funções descritivos.

Para entender isso melhor, dê uma olhada no seguinte exemplo:

~ / hello_world.sh

#!/bin/bash hello_world () { echo 'hello, world' } hello_world

Vamos analisar o código linha por linha:

  • Na linha 3 , estamos definindo a função, dando-lhe um nome e abrindo a chave { que marca o início do corpo da função. A linha 4 é o corpo da função. O corpo da função pode conter vários comandos e declarações de variáveis. A linha 5 , o colchete de fechamento } , define o final da função hello_world . Na linha 7 , estamos executando a função. Você pode executar a função quantas vezes precisar.

Se você executar o script, ele imprimirá hello, world .

Escopo das variáveis

Variáveis ​​globais são variáveis ​​que podem ser acessadas de qualquer lugar no script, independentemente do escopo. No Bash, todas as variáveis ​​por padrão são definidas como globais, mesmo se declaradas dentro da função.

Variáveis ​​locais podem ser declaradas no corpo da função com a palavra-chave local e podem ser usadas apenas dentro dessa função. Você pode ter variáveis ​​locais com o mesmo nome em diferentes funções.

Para ilustrar melhor como o escopo das variáveis ​​funciona no Bash, vamos considerar um exemplo:

~ / variables_scope.sh

#!/bin/bash var1='A' var2='B' my_function () { local var1='C' var2='D' echo "Inside function: var1: $var1, var2: $var2" } echo "Before executing function: var1: $var1, var2: $var2" my_function echo "After executing function: var1: $var1, var2: $var2"

O script começa definindo duas variáveis ​​globais var1 e var2 . Em seguida, uma função que define uma variável local var1 e modifica a variável global var2 .

Before executing function: var1: A, var2: B Inside function: var1: C, var2: D After executing function: var1: A, var2: D

A partir da saída acima, podemos concluir que:

  • Se você definir uma variável local dentro do corpo da função com o mesmo nome de uma variável global existente, ela terá precedência sobre a variável global. As variáveis ​​globais podem ser alteradas de dentro da função.

Retornar valores

Diferentemente das funções nas linguagens de programação "reais", as funções do Bash não permitem que você retorne um valor quando chamado. Quando uma função bash é concluída, seu valor de retorno é o status da última instrução executada na função, 0 para êxito e número decimal diferente de zero no intervalo de 1 a 255 para falha.

O status de retorno pode ser especificado usando a palavra-chave return e é atribuído à variável $? . A declaração de return finaliza a função. Você pode pensar nisso como o status de saída da função.

~ / return_values.sh

#!/bin/bash my_function () { echo "some result" return 55 } my_function echo $?

some result 55

Para realmente retornar um valor arbitrário de uma função, precisamos usar outros métodos. A opção mais simples é atribuir o resultado da função a uma variável global:

~ / return_values.sh

#!/bin/bash my_function () { func_result="some result" } my_function echo $func_result

some result

Outra opção melhor para retornar um valor de uma função é enviar o valor para stdout usando echo ou printf como mostrado abaixo:

~ / return_values.sh

#!/bin/bash my_function () { local func_result="some result" echo "$func_result" } func_result="$(my_function)" echo $func_result

some result

Em vez de simplesmente executar a função que imprimirá a mensagem em stdout, estamos atribuindo a saída da função à variável func_result usando a substituição do comando $() . A variável pode ser usada posteriormente conforme necessário.

Passando argumentos para funções Bash

Para passar qualquer número de argumentos para a função bash, basta colocá-los logo após o nome da função, separados por um espaço. É uma boa prática aspas duplas nos argumentos para evitar a análise incorreta de um argumento com espaços nele.

  • Os parâmetros passados ​​são $1 , $2 , $3 $n , correspondentes à posição do parâmetro após o nome da função. A variável $0 é reservada para o nome da função. A variável $# mantém o número de parâmetros / argumentos posicionais transmitidos para o As variáveis $* e $@ contêm todos os parâmetros / argumentos posicionais passados ​​para a função.
    • Quando entre aspas duplas, "$*" expande para uma única sequência separada por espaço (o primeiro caractere do IFS) - "$1 $2 $n" .Quando entre aspas duplas, "$@" expande para separar sequências - "$1" "$2" "$n" . Quando não está entre aspas, $* e $@ são os mesmos.

Aqui está um exemplo:

~ / crossing_arguments.sh

#!/bin/bash greeting () { echo "Hello $1" } greeting "Joe"

Hello Joe

Conclusão

Uma função Bash é um bloco de código reutilizável projetado para executar uma operação específica. Uma vez definida, a função pode ser chamada várias vezes em um script.

Você também pode ler sobre como usar uma função Bash para criar um comando de atalho memorável para um comando mais longo.

terminal bash