Argumentos, valores de retorno e escopo

Introdução ao Bash Scripting

Alex Scriven

Data Scientist

Passando argumentos para funções em Bash

Passar argumentos para funções é similar a passar para um script: use a notação $1.

Você também tem acesso às propriedades especiais de ARGV que vimos antes:

  • Cada argumento pode ser acessado com as notações $1, $2.
  • $@ e $* trazem todos os argumentos em ARGV
  • $# dá a quantidade (número) de argumentos
Introdução ao Bash Scripting

Exemplo de passagem de argumentos

Vamos passar alguns nomes de arquivos como argumentos de uma função para demonstrar. Vamos percorrê-los e imprimir.

function print_filename {
    echo "The first file was $1"

for file in $@ do echo "This file has name $file" done }
print_filename "LOTR.txt" "mod.txt" "A.py"

 

 

 

The first file was LOTR.txt
This file has name LOTR.txt
This file has name mod.txt
This file has name A.py
Introdução ao Bash Scripting

Escopo em programação

 

"Escopo" em programação indica onde uma variável é acessível.

  • "Global" significa acessível em qualquer lugar do programa, inclusive em laços FOR, IF, funções etc.
  • "Local" significa acessível só em uma parte do programa.

Por que isso importa? Se você tentar acessar algo com escopo local fora da área, o programa pode falhar com erro!

Introdução ao Bash Scripting

Escopo em funções Bash

Diferente da maioria das linguagens (ex.: Python e R), no Bash todas as variáveis são globais por padrão.

function print_filename {
    first_filename=$1
}

print_filename "LOTR.txt" "model.txt" echo $first_filename
LOTR.txt

Cuidado: escopo global pode ser perigoso, pois há mais risco de algo indesejado acontecer.

Introdução ao Bash Scripting

Restringindo escopo em funções Bash

Você pode usar a palavra-chave local para restringir o escopo da variável.

function print_filename {
    local first_filename=$1
}

print_filename "LOTR.txt" "model.txt" echo $first_filename


 

P: Por que não houve erro, só uma linha em branco?

Resposta: first_filename foi atribuída ao primeiro elemento global de ARGV ($1).

Eu executei o script sem argumentos (bash script.sh), então isso vira um elemento em branco. Fique atento!

Introdução ao Bash Scripting

Valores de retorno

Já sabemos como receber argumentos — e para devolver valores?

O return no Bash serve apenas para indicar sucesso (0) ou falha (outros valores 1-255). Isso fica na variável global $?

Nossas opções:

  1. Atribuir a uma variável global
  2. Usar echo na última linha da função e capturar com shell-dentro-do-shell
Introdução ao Bash Scripting

Um erro de retorno

Vamos ver um erro de retorno:

function function_2 {
    echlo # An error of 'echo'
}

function_2 # Call the function echo $? # Print the return value
script.sh: line 2: echlo: command not found
127

O que aconteceu?

  1. Houve um erro ao chamar a função
    • O script tentou achar "echlo" como programa, mas ele não existe
  2. O valor de retorno em $? foi 127 (erro)
Introdução ao Bash Scripting

Retornando corretamente

Vamos retornar corretamente um valor para usar em outra parte do script usando echo e captura com shell-dentro-do-shell:

function convert_temp {
    echo $(echo "scale=2; ($1 - 32) * 5 / 9" | bc)
}

converted=$(convert_temp 30) echo "30F in Celsius is $converted C"
30F in Celsius is -1.11 C
  • Perceba que não criamos mais a variável intermediária.
Introdução ao Bash Scripting

Vamos praticar!

Introdução ao Bash Scripting

Preparing Video For Download...