Script Shell Data atual - Data de nascimento

1. Script Shell Data atual - Data de nascimento

Yuri
yurifc4

(usa Manjaro Linux)

Enviado em 18/10/2014 - 13:03h

Boaa... o que eu preciso parece simples, pegar a data atual e talvez em uma variável uma data de nascimento, e mostrar quantos dias faltam para o aniversário.

Tenho como base esse script, a ideia é melhorar ele... diminuir talvez essa bagaça com algo mais simples.

############################## Pegar valores do sistema - Data do Sistema Operacional
ADEHOJE=$(date +"%d")
MES=$(date +"%m")
ANO=$(date +"%Y")
DSEMANA=$(date +"%w")

HOJE=$ADEHOJE"-"$MES"-"$ANO

echo "Dia =" $ADEHOJE
echo "Mês =" $MES
echo "Ano =" $ANO
echo "Dia da Semana =" $DSEMANA
echo "HOJE=" $HOJE

############################## Verificar se a data de nascimento informado através de parâmetro
x=$1 # DT DATAINFORMADA
DT_dia="${x:0:2}" # Pegar os dois primeiros caracteres da variável DT_DATAINFORMADA
DT_mes="${x:3:2}" # Pegar o quarto e quinto caractere da variável DT_DATAINFORMADA
DT_ano="${x:6:4}" # Pegar da sétima a décima posição de caracteres da variável DT_DATAINFORMADA, ou as quatro últimas posições.
echo "niver - Dia=" $DT_dia
echo "niver - Mês="$DT_mes
echo "niver - Ano="$DT_ano


############################### Testar o dia
if test $DT_dia -gt 0
then
if test $DT_dia -le 31
then
ERROR_DT="OK"
else
ERROR_DT="Dia informado é maior que 31"
fi
else
ERROR_DT="Valor do dia não confere"
fi
############################### Testar o mês
if test $DT_mes -gt 0
then
if test $DT_mes -le 12
then
ERROR_DT="OK"
else
ERROR_DT="Mês informado é maior que 12"
fi
else
ERROR_DT="Mês não confere"
fi
############################### Testar o ano
if test $DT_ano -gt 1900
then
if test $DT_ano -le $(date +"%Y")
then
ERROR_DT="OK"
else
ERROR_DT="Ano informado é maior que" $(date +"%Y")
fi
else
ERROR_DT="Ano não confere ou inferior a 1900"
fi
############################### Mensagem de Erro
if test $ERROR_DT != "OK"
then
echo $ERROR_DT
else
#Tratar a data de nascimento no formato dd-mm-aaa
# Aqui vou comparar o mês de nascimento com o mês do sistema operacional
case $DT_mes in
"01") ############################### Janeiro
if test $DT_mes -lt $MES
then
echo "O mês $DT_mes do seu aniversário já passou!"
else
echo "Seu aniversário está chegando! JANEIRO"
if test $DT_dia -lt $ADEHOJE ## Exemplo comparar 23 < 23
then
echo "dia de aniversário $DT_dia já passou!"
else
if test $DT_dia -ge $ADEHOJE ## Exemplo comparar 23 >= 22
then
echo "dia de aniversário $DT_dia está chegando!"
fi
fi
fi
;;
"02") ############################### Fevereiro
if test $DT_mes -lt $MES
then
echo "O mês $DT_mes do seu aniversário já passou!"
else
echo "Seu aniversário está chegando! FEVEREIRO"
if test $DT_dia -lt $ADEHOJE ## Exemplo comparar 23 < 23
then
echo "dia de aniversário $DT_dia já passou!"
else
if test $DT_dia -ge $ADEHOJE ## Exemplo comparar 23 >= 22
then
echo "dia de aniversário $DT_dia está chegando!"
fi
fi
fi
;;
"03") ############################### Março
if test $DT_mes -lt $MES
then
echo "O mês $DT_mes do seu aniversário já passou!"
else
echo "Seu aniversário está chegando! MARÇO"
if test $DT_dia -lt $ADEHOJE ## Exemplo comparar 23 < 23
then
echo "dia de aniversário $DT_dia já passou!"
else
if test $DT_dia -ge $ADEHOJE ## Exemplo comparar 23 >= 22
then
echo "dia de aniversário $DT_dia está chegando!"
fi
fi
fi
;;
"04") ############################### Abril
if test $DT_mes -lt $MES
then
echo "O mês $DT_mes do seu aniversário já passou!"
else
echo "Seu aniversário está chegando! ABRIL"
if test $DT_dia -lt $ADEHOJE ## Exemplo comparar 23 < 23
then
echo "dia de aniversário $DT_dia já passou!"
else
if test $DT_dia -ge $ADEHOJE ## Exemplo comparar 23 >= 22
then
echo "dia de aniversário $DT_dia está chegando!"
fi
fi
fi
;;
"05") ############################### Maio
if test $DT_mes -lt $MES
then
echo "O mês $DT_mes do seu aniversário já passou!"
else
echo "Seu aniversário está chegando! MAIO"
if test $DT_dia -lt $ADEHOJE ## Exemplo comparar 23 < 23
then
echo "dia de aniversário $DT_dia já passou!"
else
if test $DT_dia -ge $ADEHOJE ## Exemplo comparar 23 >= 22
then
echo "dia de aniversário $DT_dia está chegando!"
fi
fi
fi
;;
"06") ############################### Junho
if test $DT_mes -lt $MES
then
echo "O mês $DT_mes do seu aniversário já passou!"
else
echo "Seu aniversário está chegando! JUNHO"
if test $DT_dia -lt $ADEHOJE ## Exemplo comparar 23 < 23
then
echo "dia de aniversário $DT_dia já passou!"
else
if test $DT_dia -ge $ADEHOJE ## Exemplo comparar 23 >= 22
then
echo "dia de aniversário $DT_dia está chegando!"
fi
fi
fi
;;
"07") ############################### Julho
if test $DT_mes -lt $MES
then
echo "O mês $DT_mes do seu aniversário já passou!"
else
echo "Seu aniversário está chegando! JULHO"
if test $DT_dia -lt $ADEHOJE ## Exemplo comparar 23 < 23
then
echo "dia de aniversário $DT_dia já passou!"
else
if test $DT_dia -ge $ADEHOJE ## Exemplo comparar 23 >= 22
then
echo "dia de aniversário $DT_dia está chegando!"
fi
fi
fi
;;
"08") ############################### Agosto
if test $DT_mes -lt $MES
then
echo "O mês $DT_mes do seu aniversário já passou!"
else
echo "Seu aniversário está chegando! AGOSTO"
if test $DT_dia -lt $ADEHOJE ## Exemplo comparar 23 < 23
then
echo "dia de aniversário $DT_dia já passou!"
else
if test $DT_dia -ge $ADEHOJE ## Exemplo comparar 23 >= 22
then
echo "dia de aniversário $DT_dia está chegando!"
fi
fi
fi
;;
"09") ############################### Setembro
if test $DT_mes -lt $MES
then
echo "O mês $DT_mes do seu aniversário já passou!"
else
echo "Seu aniversário está chegando! SETEMBRO"
if test $DT_dia -lt $ADEHOJE ## Exemplo comparar 23 < 23
then
echo "dia de aniversário $DT_dia já passou!"
else
if test $DT_dia -ge $ADEHOJE ## Exemplo comparar 23 >= 22
then
echo "dia de aniversário $DT_dia está chegando!"
fi
fi
fi
;;
"10") ############################### Outubro
if test $DT_mes -lt $MES
then
echo "O mês $DT_mes do seu aniversário já passou!"
else
echo "Seu aniversário está chegando! OUTUBRO"
if test $DT_dia -lt $ADEHOJE ## Exemplo comparar 23 < 23
then
echo "dia de aniversário $DT_dia já passou!"
else
if test $DT_dia -ge $ADEHOJE ## Exemplo comparar 23 >= 22
then
echo "dia de aniversário $DT_dia está chegando!"
fi
fi
fi
;;
"11") ############################### Novembro
if test $DT_mes -lt $MES
then
echo "O mês $DT_mes do seu aniversário já passou!"
else
echo "Seu aniversário está chegando! NOVEMBRO"
if test $DT_dia -lt $ADEHOJE ## Exemplo comparar 23 < 23
then
echo "dia de aniversário $DT_dia já passou!"
else
if test $DT_dia -ge $ADEHOJE ## Exemplo comparar 23 >= 22
then
echo "dia de aniversário $DT_dia está chegando!"
fi
fi
fi
;;
"12") ############################### Dezembro
if test $DT_mes -lt $MES
then
echo "O mês $DT_mes do seu aniversário já passou!"
else
echo "Seu aniversário está chegando! DEZEMBRO"
if test $DT_dia -lt $ADEHOJE ## Exemplo comparar 23 < 23
then
echo "dia de aniversário $DT_dia já passou!"
else
if test $DT_dia -ge $ADEHOJE ## Exemplo comparar 23 >= 22
then
echo "dia de aniversário $DT_dia está chegando!"
fi
fi
fi
;;
esac
fi


  


2. Re: Script Shell Data atual - Data de nascimento

luiz
luizsouza99

(usa Linux Mint)

Enviado em 18/10/2014 - 13:33h

Para diminuir o script, ao invés de vc usar cerca de 16 linhas para cada mês vc pode usar um arquivo texto armazenando os meses do ano, assim sempre que precisar ele vai no arquivo e busca o mês em questão.

por exemplo, eu usei a linha abaixo num script que eu precisava justamente buscar um mês de acordo com o valor do loop, então a cada rodada ele buscava exatamente o m&#7869;s que eu precisava numa lista. como o valor do mês depende da reposta do usário basta vc usar a variável "VOLTA_MES" para perguntar ao usuário qual mês de nascimento.

MES=$(cat /etc/calendario/lista-meses | sed -n ${VOLTA_MES}p)

outra coisa que ficará complicado é a questão dos meses que tem mais ou menos dias (30, 31, 29, 28) vc terá que arrumar alguma forma de fazer os calculos individualmente para estes meses, vc pode por exemplo colocar alguns ifs ou case dentro do loop, "se mes é igual a 2 então a variavel dias é igual a 28" assim o script calculara a quantidade correta de dias, a mesma coisa para os anos bisextos. mas vc tem que desenvolver a primeira parte que falei antes, porque senão ficará muito dificil o raciocinio.


3. Re: Script Shell Data atual - Data de nascimento

Yuri
yurifc4

(usa Manjaro Linux)

Enviado em 22/10/2014 - 19:41h

Consegue me mostrar como ficaria? Ou algum outro script mais simples...


4. Re: Script Shell Data atual - Data de nascimento

luiz
luizsouza99

(usa Linux Mint)

Enviado em 23/10/2014 - 11:51h

não tem como te mostrar porque eu teria que praticamente refazer o script, o que posso fazer é te ajudar no desenvolvimento dele, para isto vc pode começar a estudar o "Shell Script do Zero" que ensina programação e shell script para quem não sabe absolutamente nada.

http://www.mediafire.com/download/4x4yadaf8s9c7tx/Shell%20Script%20do%20Zero.pdf

assim fica facil, pois bastará te falar a lógica que deve ser usada e vc saberá como escreve-la;


5. date com operações aritmeticas

Marcos Paulo Ferreira
daemonio

(usa Slackware)

Enviado em 23/10/2014 - 12:26h

Depois de ter lido a data de aniversário, é só fazer:

$ date -d "-${dia}days -${mes}months -${ano}years"

o date irá obter a data atual e subtrair o dia, mes e ano dela e retornar a data equivalente.

Se a data passada for maior, então o date retorna erro, e isso pode ser usado para tratamento de erros.

Com a data retornada, é só usar os formatos (%h, %a, %m, etc) para pegar campos específicos.


Acho que isso ajuda.
t+


6. Re: Script Shell Data atual - Data de nascimento

Yuri
yurifc4

(usa Manjaro Linux)

Enviado em 23/10/2014 - 15:22h

Meu pensamento era esse, fazer um calculo simples entre a data de aniversário e a data atual.
Outra era validar o parâmetro passado no terminal, capturado pelo x=$1...

$ ./script.sh 16/11/1987

Caso ele não não especifique a data como parâmetro, acusar algum erro e voltar o script do inicio...






Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner
Linux banner
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts