Buscar

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 3, do total de 15 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 6, do total de 15 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 9, do total de 15 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Continue navegando


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