Funções de compreensão e escrita em scripts de shell - Parte VI

Funções de compreensão e escrita em scripts de shell - Parte VI

As funções desempenham um papel importante em qualquer linguagem de programação. Como muitas linguagens de programação reais, o Bash possui funções que são usadas com implementação limitada.

Entendendo as funções de script linux shell

O que são funções?

Na programação, as funções são nomeadas seções de um programa que executa uma tarefa específica. Nesse sentido, uma função é um tipo de procedimento ou rotina. Quando uma função é chamada, o programa sai da seção atual do código e começa a executar a primeira linha dentro da função. Sempre que houver código repetitivo ou quando uma tarefa se repetir, considere usar uma função.

Por exemplo, considere o caso em que precisamos encontrar o fatorial de um número em vários estágios de um determinado programa. Em vez de escrever todo o código (para calcular o fatorial) todas as vezes, podemos escrever essa parte do código que calcula o fatorial uma vez dentro de um bloco e reutiliza o mesmo em várias ocasiões.

Por que escrevemos funções?

  1. Isso nos ajuda a reutilizar o código.
  2. Melhorar a legibilidade do programa.
  3. Uso eficiente de variáveis ​​dentro do programa.
  4. Nos permite testar a parte do programa por parte.
  5. Exibe o programa como um monte de sub-passo.
Funções em scripts de shell

A sintaxe geral para escrever funções no script de shell inclui as seguintes maneiras.

function func_name … comandos… ou func_name () … comandos… abrir aparelhos encaracolados também podem ser usados ​​na segunda linha também. func_name () … comandos…

Você está sempre livre para escrever comandos válidos dentro desses blocos de função, como fazemos normalmente em scripts de shell. Agora vamos tentar escrever um script simples com uma pequena função dentro dele.

#!/bin/Bash call_echo () echo 'isto está dentro da função' op = $ 1 se [$# -ne 1]; então eco "uso: $ 0" else se [$ 1 = 0]; então eco ', esta é a função externa' elif [$ 1 = 1]; Então call_echo else eco 'argumento inválido' fi fi saída 0

A definição da função deve preceder a primeira chamada para ela. Não há nada como 'declarar a função' antes de chamá -la. E sempre podemos aninhar funções dentro das funções.

Observação:- Escrever funções vazias sempre resulta em erros de sintaxe.

Quando a mesma função é definida várias vezes, a versão final é o que é invocado. Vamos dar um exemplo.

#!/bin/Bash func_same () echo 'First Definition' func_same () echo 'Segunda definição' func_same sai
Funções que tomam parâmetros e valores retornando

Vamos nos aprofundar considerando funções que tomam parâmetros e devolvendo valores. Para retornar um valor de uma função, usamos o shell 'retorno' embutido. A sintaxe é a seguinte.

func_name () … comandos… return $ ret_val

Da mesma forma, podemos passar argumentos para as funções separadas com espaços, conforme dado abaixo.

func_name $ arg_1 $ arg_2 $ arg_3

Dentro da função, podemos acessar os argumentos em ordem como US $ 1, US $ 2, US $ 3 e assim por diante. Veja o script de exemplo a seguir para encontrar o máximo de dois números inteiros usando a função para adicionar mais clareza.

#!/bin/bash usg_err = 7 max_two () if ["$ 1" -eq "$ 2"]; então eco 'igual' saia 0 elif ["$ 1" -gt "$ 2"]; Então echo $ 1 else echo $ 2 fi err_str () echo "Uso: $ 0" Exit $ usg_err num_1 = $ 1 num_2 = $ 2 x se [$# -ne 2]; Então err_str elif ['expr $ num_1:' [0-9]*"-eq $ #num_1]; então se ['expr $ num_2:' [0-9]*"-eq $ #num_2] ; Então max_two $ num_1 $ num_2 else err_str fi else err_str fi saída 0

O exposto acima parece um pouco complexo, mas é simples se lermos as linhas. Primeiro aninhado if-else if lines para fins de validação i.e., Para verificar o número e o tipo de argumentos com a ajuda de expressões regulares. Depois disso, chamamos a função com dois argumentos da linha de comando e exibe o resultado lá em si. Isso ocorre porque não podemos retornar grandes números inteiros de uma função. Outra maneira de contornar esse problema é usar variáveis ​​globais para armazenar o resultado na função interna. O script abaixo explica este método.

#!/bin/bash usg_err = 7 ret_val = max_two () if ["$ 1" -eq "$ 2"]; então eco 'igual' saia 0 elif ["$ 1" -gt "$ 2"]; então ret_val = $ 1 else ret_val = $ 2 fi err_str () echo "uso: $ 0" saia $ usg_err num_1 = $ 1 num_2 = $ 2 se [$# -ne 2]; Então err_str elif ['expr $ num_1:' [0-9]*"-eq $ #num_1]; então se ['expr $ num_2:' [0-9]*"-eq $ #num_2] ; Então max_two $ num_1 $ num_2 echo $ ret_val else err_str fi else err_str fi saída 0

Agora experimente alguns problemas interessantes que foram explicados nas séries anteriores de script de shell usando funções da seguinte forma.

  1. Entenda as dicas básicas de linguagem de script linux shell - Parte I
  2. 5 scripts de shell para iniciantes Linux para aprender programação de shell - Parte II
  3. Navegando pelo mundo do Linux Bash Script - Parte III
  4. Aspecto matemático da programação do Linux Shell - Parte IV
  5. Cálculo de expressões matemáticas na linguagem de script de shell - Parte V

Voltarei com mais informações sobre recursos funcionais, como usar variáveis ​​locais, recursão etc. na próxima parte. Fique atualizado com comentários.