Retorno de Shell Script

1. Retorno de Shell Script

Alan Guanais de Miranda
amiranda

(usa Outra)

Enviado em 30/01/2014 - 11:59h

Bom dia Pessoal :)

Estou criando um shell na qual a mesma chama outra shell que calcula data. Gostaria que esse resultado me retorna-se em uma variavél para que eu posso utilizar ao longo do código

dias= exec varia_data2.sh 30/01/2014 03/02/2014
echo $dias

dias= ./varia_data2.sh 30/01/2014 03/02/2014
echo $dias

dias= $(varia_data2.sh 30/01/2014 03/02/2014)
echo $dias

Mas não está retornando o valor data :(




  


2. Re: Retorno de Shell Script

Luis R. C. Silva
luisrcs

(usa Linux Mint)

Enviado em 30/01/2014 - 12:43h

amiranda escreveu:

dias=$(varia_data2.sh 30/01/2014 03/02/2014)



Executando varia_data2.sh ele retorna o quê?


3. Re: Retorno de Shell Script

Alan Guanais de Miranda
amiranda

(usa Outra)

Enviado em 30/01/2014 - 12:45h

Ele retorna um echo da varivel

--Código

# ROTINA DE VARIACAO DE DATA
# Codigo pertence a Comunidade
# VOL (Viva o Linux)
#-------------------------------------------------------
# Primeira versao: Davison Pasqualini
# 29/12/2009 fdmarp
#-------------------------------------------------------
# 11/01/2010 | Alteracao do parametro ano_val inicial
# | de 1970 para $ano1. Torna o script mais
# | rápido se a data inicial for acima de 1970.
#-------------------------------------------------------

#-Parametros-----------------------------------

data_inicial=$1
data_final=$2



dia1=`echo $data_inicial | cut -d"/" -f1`
mes1=`echo $data_inicial | cut -d"/" -f2`
ano1=`echo $data_inicial | cut -d"/" -f3`
dia2=`echo $data_final | cut -d"/" -f1`
mes2=`echo $data_final | cut -d"/" -f2`
ano2=`echo $data_final | cut -d"/" -f3`


#-Calculo--------------------------------------
verifica_bissexto ()
{
verif1=`echo scale=3\;$ano_val/4 |bc | cut -d. -f2`
if [ "$verif1" -eq 0 ]; then
verifica_bissexto_p2
else
bissexto="0"
fi
}

verifica_bissexto_p2 ()
{
verif2=`echo scale=3\;$ano_val/100 |bc | cut -d. -f2`
if [ "$verif2" -eq 0 ]; then
verifica_bissexto_p3
else
bissexto="1"
fi
}

verifica_bissexto_p3 ()
{
verif3=`echo scale=3\;$ano_val/400 |bc | cut -d. -f2`
if [ "$verif3" -eq 0 ]; then
bissexto="1"
else
bissexto="0"
fi
}

verifica_bissexto_p4 ()
{
ano_val=`expr $ano_fim + 1`
verifica_bissexto
if [ "$bissexto" -eq 0 ]; then
dias_count=`expr $dias_count + 28`
else
dias_count=`expr $dias_count + 29`
fi
}


varia_ano ()
{
dias_count=0
ano_val=$ano1
while [ "$ano_val" -le "$ano_fim" ];
do
verifica_bissexto
if [ "$bissexto" -eq 0 ]; then
dias_count=`expr $dias_count + 365`
else
dias_count=`expr $dias_count + 366`
fi
ano_val=`expr $ano_val + 1`
done
varia_mes
}

varia_mes ()
{
mes_val=1
while [ "$mes_val" -le "$mes_fim" ];
do
case "$mes_val" in
"1" | "3" | "5" | "7" | "8" | "10" | "12" )
dias_count=`expr $dias_count + 31`
;;
"01" | "03" | "05" | "07" | "08" )
dias_count=`expr $dias_count + 31`
;;
"4" | "04" | "6" | "06" | "9" | "09" | "11" )
dias_count=`expr $dias_count + 30`
;;

"2" | "02" )
verifica_bissexto_p4
;;
esac
mes_val=`expr $mes_val + 1`
done
varia_dia
}

varia_dia ()
{
dias_count=`expr $dia_fim + $dias_count`
}

dia_fim=`expr $dia1 - 1`
ano_fim=`expr $ano1 - 1`
mes_fim=`expr $mes1 - 1`
varia_ano
Varia_dias_data1=$dias_count


dia_fim=`expr $dia2 - 1`
ano_fim=`expr $ano2 - 1`
mes_fim=`expr $mes2 - 1`
varia_ano
Varia_dias_data2=$dias_count

resultado=`expr $Varia_dias_data2 - $Varia_dias_data1`

echo "resultado: $resultado dias"



4. Re: Retorno de Shell Script

Luis R. C. Silva
luisrcs

(usa Linux Mint)

Enviado em 30/01/2014 - 13:11h

Certo, mas executando o código ele retorna?


5. Re: Retorno de Shell Script

Alan Guanais de Miranda
amiranda

(usa Outra)

Enviado em 30/01/2014 - 13:16h

Sim, ele retorna esse echo com o valor da varivel $Resultado.Essa que estou tentando recuperar na outra shell, mas não sei o que está errado :(



6. Re: Retorno de Shell Script

Luis R. C. Silva
luisrcs

(usa Linux Mint)

Enviado em 30/01/2014 - 13:33h

Aqui deu certo assim:

$ dias=$(./varia_data2.sh 30/01/2014 03/02/2014)
$ echo $dias
$ resultado: 4 dias
$


7. Re: Retorno de Shell Script

Alan Guanais de Miranda
amiranda

(usa Outra)

Enviado em 30/01/2014 - 13:41h

OBS: Esse resultado que imprimi na tela é da outra SHELL. Gostaria de somente buscar o valor da variavel $Resultado do script varia_data2.sh e jogar na variavel $dias.

O problema é que não está atribuindo nada na variavel $dias

:(


8. Re: Retorno de Shell Script

Luis R. C. Silva
luisrcs

(usa Linux Mint)

Enviado em 30/01/2014 - 13:51h

rei_astro escreveu:

Aqui deu certo assim:

$ dias=$(./varia_data2.sh 30/01/2014 03/02/2014)
$ echo $dias
$ resultado: 4 dias
$


E o que você acha que aconteceu aqui?


9. Re: Retorno de Shell Script

Alan Guanais de Miranda
amiranda

(usa Outra)

Enviado em 30/01/2014 - 14:07h

Nesse caso o echo que está apresentando é da shell varia_data2.sh, porém ele não está passando o valor 4 pra variavel dias..

Fiz assim:

dias= $(./varia_data2.sh 30/01/2014 03/02/2014)
echo $dias

Esse echo não é exibido na tela, e sim o do scrpit. Ele retornar somente o 4

:(




10. Re: Retorno de Shell Script

Luis R. C. Silva
luisrcs

(usa Linux Mint)

Enviado em 30/01/2014 - 14:17h

Então ao invez de terminar o arquivo com

echo "resultado: $resultado dias"

Termine com:

echo $resultado


11. Re: Retorno de Shell Script

Luis R. C. Silva
luisrcs

(usa Linux Mint)

Enviado em 30/01/2014 - 14:44h

Só pra completar, o shell script não trabalha com inteiros. Existem artifícios que utiliza cálculos básicos ou complexos (junto com bc).

O que digo é que tudo o que o shell retorna é string. não dá pra retornar um inteiro. E um script shell só retorna algo com o echo mesmo, não dá pra retornar valores com return. Até dá, mas pra isso tem que inserir no cabeçalho do outro script e chamar a função que retorna a variável.

Resumindo: um script shell por si só só retorna uma string (com o comando echo). Então tem mesmo que modificar a última linha do script.


12. Re: Retorno de Shell Script

Alan Guanais de Miranda
amiranda

(usa Outra)

Enviado em 30/01/2014 - 14:46h

Então ele agora demontra somente o 4, porém esse echo é da varia_data2.sh e não o echo que dou na variavel $dias.Um teste que fiz, foi remover o echo da shell varia_data2.sh e ela não me mostra nada na tela, sendo assim a variavel $dias não está sendo populado com o retorno da Shell varia_data2.sh






01 02



Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts