Prévia do material em texto
Programação para Servidores Aula 18 Sumário • Funções • Argumentos e status de saída • Variáveis locais • Recursividade 2 Funções • Uma função é um bloco de código que implementa um conjunto de operações para desempenhar uma tarefa específica. • Uma vez definida, uma função pode então ser chamada a parLr de múlLplos lugares de dentro do programa principal ou de outras funções. • Toda função deve ser definida antes de ser uLlizada. Isto pode ser feito no início do script ou em um arquivo separado e incluído no programa com o comando source. 3 Funções • A sintaxe para a definição de uma função é: function nome_da_função { comando 1 ... comando n } • Outra forma: nome_da_função( ) { comando 1 ... comando n } 4 Funções • Exemplo: function msg () { echo "Mostrando uma mensagem." } chamadora () { echo "Entrando na funcao chamadora." msg echo "Saindo da funcao chamadora." } chamadora msg 5 Funções • Exemplo: function msg () { echo "Mostrando uma mensagem." } chamadora () { echo "Entrando na funcao chamadora." msg echo "Saindo da funcao chamadora." } chamadora msg 6 $ ./teste.sh Entrando na funcao chamadora. Mostrando uma mensagem. Saindo da funcao chamadora. Mostrando uma mensagem. Funções • Argumentos – Funções podem receber e processar argumentos passados durante sua chamada. Estes argumentos são acessados através das variáveis $1, $2, $3, etc. Exemplo: mostra_soma () { if [ -z "$1" ]; then a=0 else a=$1 fi 7 if [ -z "$2" ]; then b=0 else b=$2 fi let soma=$a+$b; echo "$a + $b = $soma" } Funções • Argumentos – Funções podem receber e processar argumentos passados durante sua chamada. Estes argumentos são acessados através das variáveis $1, $2, $3, etc. Exemplo: mostra_soma () { if [ -z "$1" ]; then a=0 else a=$1 fi 8 if [ -z "$2" ]; then b=0 else b=$2 fi let soma=$a+$b; echo "$a + $b = $soma" } OBS.: As funções não enxergam os argumentos passados para o script. Por isso, não é redundante o uso das variáveis $1, $2, etc. Funções • Exemplo: função que espera até que um determinado usuário (passado como parâmetro) entre na rede: espera_usuario () { until who | grep "$1" > /dev/null; do sleep 30 done } 9 Funções • Status de saída – Funções retornam valores de status de saída de forma similar aos comandos. O status retornado por uma função pode ser definido: a) Explicitamente pelo comando return, b) Na ausência do return, será retornado o valor do status de saída do úlLmo comando executado na função. – Exemplo: function teste() { echo "Apenas um teste" return 0 } 10 Funções • Status de saída (cont.) – O status de saída pode ser usado como retorno da função. – Exemplo: function teste() { return $(( $1 + $2 )) } teste 3 4 – Entretanto, este uso tem uma restrição: o status de retorno tem que ser um número entre 0 e 255; 11 Funções • Variáveis locais – Uma variável pode ser declarada com o comando local para que seu escopo fique reduzido à função na qual ela foi definida. Exemplos. #variavel global func () { let soma=$1+$2 echo "$1 + $2 = $soma" } soma=8 echo "$soma" # mostra 8 func 2 3 # mostra 2 + 3 = 5 echo "$soma" # mostra 5 12 #variavel local func () { local soma let soma=$1+$2 echo "$1 + $2 = $soma" } soma=8 echo "$soma" # mostra 8 func 2 3 # mostra 2 + 3 = 5 echo "$soma" # mostra 8 Funções • Recursividade – A programação shell script permite que funções realizem chamadas recursivas, porém há um impacto significaLvo no desempenho do sistema; – Uma função é recursiva, quando faz uma chamada a si mesma. Exemplo: function fatorial() { if [ $1 -le 1 ]; then return 1 else fatorial $(($1 - 1)) return $(( $1 * $? )) fi } 13 fatorial $1 echo $? Funções • Recursividade (cont.) – A função anterior calcula corretamente no máximo o fatorial de 5 = 120. Segue abaixo uma função fatorial mais robusta: function fatorial() { if [ $1 -le 1 ]; then echo 1 else local tmp tmp=`fatorial $(($1 - 1))` echo $(( $1 * $tmp )) fi } fatorial $1 14 Exercícios • Escrever scripts que implementam e testam as seguintes funções: 1. Uma função que receba 2 números e retorne como código de status um dos seguintes valores: • 0 se os números forem iguais; • 1 se o primeiro for menor que o segundo; • 2 se o primeiro for maior que o segundo.. 2. Uma função que receba como parâmetros A e B e calcule AB. 3. Uma função que receba várias palavras e imprima estas palavras em ordem alfabéLca. 15