Capítulo 05: Comandos de Loop ←

Funções

Funções são interessantes para quando você precisa fazer uma determinada coisa várias vezes num mesmo script.

Uma função é como se fosse um script dentro do script, sendo assim ele também usa o mesmo esquema de parâmetros de um script comum ($1 para primeiro parâmetro, $2 para segunda, e todas aquelas regras explicadas em Parâmetros com a exceção do $0, que não retorna o nome da função!). Uma função também é capaz de retornar um valor usando o return ValorDeRetorno, sendo que ValorDeRetorno ficará armazenado em $?, vale observar também que só é possível retornar valores inteiros. Por exemplo, se na função tiver return 123 depois da execução desta instrução $? valerá 123.

Bem... explicar com um código sempre é mais fácil! Se você acha que vai se safar do poderoso "Hello World" está muito enganado! Aí vai ele:

#!/bin/bash
# hello.sh
# "Hello World" usado para ilustrar o uso de funções.

function quit {
    echo -e "\e[1;32mTCHAU!\e[m"
    exit
}

function e {
    echo -e "\e[1;35m$1\e[m"
}

e Hello
e World
quit
echo "Isso aqui não será impresso"

Uhmmm... Sem falar muito eu já emendo outro código:

#!/bin/bash
# maior.sh

PARAM_ERR=-198 # Se for passado mais do que dois parâmetros.
EQUAL=-199     # Retorno se os parâmetros forem iguais.

function maior # Retorna o maior de dois números
{              # OBS: os números comparados precisam ser menores que 257
[ -z "$2" ] && return $PARAM_ERR

if [ "$1" -eq "$2" ]; then
    return $EQUAL
elif [ "$1" -gt "$2" ]; then
    return $1
else
    return $2
fi
}

read -p "Numero-1: " N1
read -p "Numero-2: " N2
maior $N1 $N2
RET_VAL=$?

if [ $RET_VAL -eq $PARAM_ERR ]; then
    echo "É necessário passar dois parâmetros para a função."
elif [ $RET_VAL -eq $EQUAL ]; then
    echo "Os dois números são iguais."
else
    echo "O maior número é $RET_VAL."
fi


exit 0

Só mais algumas informações adicionais:

  • O return quando executado interrompe a execução da função e a execução passa para a instrução imediatamente posterior a qual a função foi chamada.
  • O valor mais alto que uma função pode retornar é 256.
  • Se quer saber mais detalhes sobre funções o Functions do Advanced Bash-Scripting Guide vai lhe ser muito útil (ver Referências).

Fique com mais este código que eu achei bem interessante. ;-)

#!/bin/bash
# romano.sh
#
# Código baseado em um do Advanced Bash-Scripting Guide.
# Mais informações sobre este guia em http://www.linuxdoc.org
# Caso não entenda o código, faça um esforcinho! ;-)

LIMITE=400

function romano {
    NUM=$1
    FATOR=$2
    ROMAN=$3

    (( RESTO = $NUM - $FATOR ))

    while [ "$RESTO" -ge 0 ]; do
        echo -n $ROMAN
        (( NUM -= $FATOR ))
        (( RESTO = $NUM - $FATOR ))
    done

    return $NUM
}

[ "$1" ] || {
    echo "Uso: `basename $0` NUMERO"
    exit 1
}

[ "$1" -gt 400 ] && {
    echo "$1 ultrapassa o limite de $LIMITE"
    exit 1
}

NUMERO=$1

romano $NUMERO 100 C
NUMERO=$?

romano $NUMERO 90 XC
NUMERO=$?

romano $NUMERO 50 L
NUMERO=$?

romano $NUMERO 40 XL
NUMERO=$?

romano $NUMERO 10 X
NUMERO=$?

romano $NUMERO 9 IX
NUMERO=$?

romano $NUMERO 5 V
NUMERO=$?

romano $NUMERO 4 IV
NUMERO=$?

romano $NUMERO 1 I
NUMERO=$?

echo

exit

Ah! Deixa eu dizer só mais uma coisinha: é possível declarar função(ões) dentro de função. Desta vez não darei exemplos, faça os testes por conta própria! :-)

Capítulo 07: Tornando seu script amigável →

results matching ""

    No results matching ""