Introdução ao Bash Scripting
Alex Scriven
Data Scientist
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:
$1, $2.$@ e $* trazem todos os argumentos em ARGV$# dá a quantidade (número) de argumentosVamos 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
"Escopo" em programação indica onde uma variável é acessível.
Por que isso importa? Se você tentar acessar algo com escopo local fora da área, o programa pode falhar com erro!
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.
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!
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:
echo na última linha da função e capturar com shell-dentro-do-shellVamos 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?
$? foi 127 (erro)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
Introdução ao Bash Scripting