Passando parâmetros entre funções [RESOLVIDO]

1. Passando parâmetros entre funções [RESOLVIDO]

Júniot Garcia
juninhodg

(usa Ubuntu)

Enviado em 26/01/2014 - 17:23h

Boa tarde, tenho um script para calcular média com uma função

1 - calculaMedia() -> Calcula a média e escreve se o aluno foi aprovado ou não

O que eu quero na verdade é criar uma função passou() para verificar se o aluno passou ou não (apenas por didática já que comecei a estudar shell script agora), só que não sei como posso fazer a passagem de parâmetros de uma função para outra. O meu script está da seguinte forma atualmente:

--------------------------------------------------------------------
# Cálculo de média utilizando função
function calculaMedia()
{
MEDIA=$((($1+$2+$3+$4)/4))

if [ $MEDIA -ge 6 ]; then
echo "Sua média foi $MEDIA. Você foi APROVADO!";
else
echo "Sua média foi $MEDIA. Você foi REPROVADO :(";
fi
}

calculaMedia $1 $2 $3 $4
--------------------------------------------------------------------

Eu chamo no terminal da seguinte maneira: ./calcula_media.sh 6 8 9 7

Não tem como eu indicar que a função calculaMedia() precisa de quatro parâmetros para operar (calculaMedia(nota1, nota2, nota3, nota4))?

Se a função passou() que quero fazer só precisa da média resultante de calculaMedia(), como faço para retornar o valor da média e a passar para a função passou()?

Se vocês puderem modificar o script e comentar para que eu entenda ficarei muito agradecido. Abraços.



  


2. Re: Passando parâmetros entre funções [RESOLVIDO]

Paulo Dias
di4s

(usa XUbuntu)

Enviado em 26/01/2014 - 17:56h

shell script tem algumas particularidades...


realmente você não tem como especificar parametros fixos para função, voce tem que usar as variáveis $1, $2 e ...

as funções também não tem uma instrução para retorno tradicional. Existe uma instrução return para as funções shell, mas ela está relacionada com a situação da função, se executou normalmente ou se houve erro.


para fazer o que eu acho que você quer, eu uso assim:



function calculaMedia()
{
MEDIA=$((($1+$2+$3+$4)/4));

echo $MEDIA; #pseudo retorno
}

function passou()
{
if [ $1 -ge 7 ] ; then

echo "ok";
fi
}

passou $( calculaMedia 6 8 9 7 )



você pode ver esses links para saber mais

http://prmjuniorblog.blogspot.com.br/2013/01/iniciando-com-shell-script.html

http://www.vivaolinux.com.br/artigo/Programacao-com-Shell-Script/

http://www.vivaolinux.com.br/artigo/Introducao-ao-Shell-Script-Baseado-no-livro-de-Ken-O-Burtch/





3. Re: Passando parâmetros entre funções [RESOLVIDO]

Júniot Garcia
juninhodg

(usa Ubuntu)

Enviado em 26/01/2014 - 18:08h

A cara deixe eu ver se entendi.

$1...$n diz respeito à sequência de parâmetros passados para uma função (ou um script, via terminal). O que quer dizer que eu posso chamar uma função e passar os parâmetros que queira para ela tendo cuidado para não errar a sequência.

No caso

passou $(calculaMedia $1 $2 $3 $4) recebe a saída de texto de calculaMedia que por sua vez assume o valor de $1 para a função passou() por causa da saída impressa no terminal, é isso?

Acho que é assim, quebrei pra kct minha cabeça pra tentar passar parâmetros de uma função para outra :/


4. Re: Passando parâmetros entre funções [RESOLVIDO]

Paulo Dias
di4s

(usa XUbuntu)

Enviado em 26/01/2014 - 18:39h

é isso sim.


veja, se dentro de um script você coloca as duas funcões


#!/bin/bash

function calculaMedia()
{
#conteudo...
}

function passou()
{
#conteudo...
}


passou $( calculaMedia $1 $2 $3 $4 )




pra chamar o script você digita no terminal


arquivo.sh 6 7 8 9



ele executa as linhas do arquivo e chega na linha


passou $( calculaMedia $1 $2 $3 $4 )


nesse ponto $1 $2 $3 $4 são os valores passados para script. ( 6 7 8 9 )

quando os valores entram na funcao calculaMedia também são criadas variaveis $1 $2 $3 $4 no escopo dessa função. ( para recuperar os atributos passados )

quando a função calcula media termina o $( ) pega o valor que seria imprimido na tela e coloca como atributo para função passou()

dentro da função passou também é criada uma variavel $1 com escopo local

ou seja, sempre que for passado valores para uma função ou script (que na pratica são quase iguais) são criadas variáveis locais, para que você possa recuperar esse valores. Além das variaveis $1, $2 ... também é criada a variavel $0, que guarda o nome do script ou função atual, e $# que guarda a quantidade de atributos passados















5. Re: Passando parâmetros entre funções [RESOLVIDO]

Júniot Garcia
juninhodg

(usa Ubuntu)

Enviado em 26/01/2014 - 18:41h

Beleza cara agora eu entendi. Obrigado aí pela ajuda :D






Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts