Funções em Shell Scripting, parte 3: Passando (argumentos) e Obtendo (return codes) informações


- Passando argumentos para as funções

Como, depois de declaradas, podemos usar as funções assim como usamos os comandos, também podemos passar argumentos para funções, assim como fazemos com os comandos.
Os argumentos são armazenados da mesma forma que os parâmetros, quando usamos comandos.
Ou seja, o nome do script é armazenado na variável '$0', o 1o argumento fica na variável '$1', o 2o na '$2', ..., o número total de argumentos na '$#' e todos são armazenados na '$@'.
Vamos testar criando o script 'args.sh'
-------------
#!/bin/sh

args()
{
echo "Nome: $0"
echo "Total: $#"
echo "Primeiro: $1"
echo "Segundo: $2"
echo "Terceiro: $3"
echo
echo "Todos: $@"
echo
}

args arg1 arg2 arg3
------------------

Permita e execute:
chmod +x args.sh
./args.sh


- Códigos de retorno (return codes)

Como vimos, todo e qualquer comando do Unix retorna algum código. '0' caso tenha dado tudo certo e outro número para mostrar que houve um erro, onde números diferentes são usados para indicar erros diferentes. O bash armazena o código de retorno do último comando na variável '$?'.

Por exemplo, digite no terminal:
comando_inexistente
echo $?

Que exibirá o erro, pro caso do comando não existir.
Agora teste um comando que funcione bem:
ls
echo $?


- return

Como esses códigos de saída são amplamente usados no *Unix, é uma boa prática fazer o mesmo em seus scripts.
Usa-se o comando 'return [|inteiro]' ao invés de 'exit [|inteiro]' nas funções de seu script, pois queremos somente que a função termine, não o script, e retornando um inteiro para o script, fazendo uma comunicação deste com a função.

Se não usarmos um 'return' em uma função, o '$?' armazenará o código de retorno do último comando da função.

Podemos escrever só 'return' sem retornarmos explicitamente um número. Quando a função encontra 'return' ela termina imediatamente (não executa o que vem em seguida) e '$?' armazenará o código de retorno do último comando antes de encontrar da função chegar em 'return'.

Ou retornamos algo específico de nosso propósito. Dentro de condicionais, por exemplo:
if(tudo certo)
return 1
else
return 2

Lembrando que os códigos de retorno vão de 0 até 255

- Variáveis globais

Aqui vai uma pequena e importante ressalva para você que já vem de outra linguagem de programação.

Por padrão, as variáveis em Shell Scripting são globais. Se quiser que elas sejam locais em suas funçõe as declare como 'local':
local variavel='sou local'

Isso, as variáveis que você usou estarão disponíveis por todo o script. Incluindo
Portanto, cuidado. Dẽ nomes únicos para as suas variáveis.

Nenhum comentário:

Veja também: