Baixe o app para aproveitar ainda mais
Prévia do material em texto
Programação para Servidores Aula 19 Sumário • Revisão de funções; • Recursividade. 2 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 3 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 4 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 • 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; 5 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 6 #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 Exercícios – Aula 18 • 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éYca. 7 Resposta 1 function compara() { if [ $1 -eq $2 ]; then return 0 elif [ $1 -lt $2 ]; then return 1 else return 2 fi } compara $1 $2 echo $? 8 Resposta 2 function calcula() { echo $(( $1 * $2 )) } calcula $1 $2 9 Resposta 3 function ordena() { while [ $# -gt 0 ]; do echo $1 shift done | sort } ordena $@ 10 Funções • Recursividade – A programação shell script permite que funções realizem chamadas recursivas, porém há um impacto significaYvo 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 } 11 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 12 Exercícios • Escrever scripts que implementam e testam as seguintes funções: 1. Uma função que recebe o nome de um arquivo como parâmetro e imprime seu conteúdo na tela com as linhas numeradas. A função deve testar se o arquivo existe na pasta corrente e se o usuário tem permissão de leitura, mostrando mensagens de erro adequadas e amigáveis; 2. Uma função que receba como parâmetro um número e imprima a sequência de Fibonacci contendo apenas números menores do que àquele passado como parâmetro. Sequência de Fibonacci = 0 1 1 2 3 5 8 13 …, onde o próximo da sequência é a soma dos 2 anteriores; 13 Exercícios • Escrever scripts que implementam e testam as seguintes funções (conYnuação...): 3. Uma função recursiva que recebe dois números inteiros e posiYvos A e B como parâmetros e retorna o produto de A por B, usando no cálculo somente operações de soma, ou seja, SEM UTILIZAR a operação de mulYplicação; 14
Compartilhar