Ir para conteúdo

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Cazzeri

Script Shell Data atual - Data de nascimento

Recommended Posts

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 OperacionalADEHOJE=$(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 DATAINFORMADADT_dia="${x:0:2}"                    # Pegar os dois primeiros caracteres da variável DT_DATAINFORMADADT_mes="${x:3:2}"                  # Pegar o quarto e quinto caractere da variável DT_DATAINFORMADADT_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_diaecho "niver - Mês="$DT_mesecho "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 Erroif   test  $ERROR_DT != "OK"  then   echo $ERROR_DTelse    #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         ;;    esacfi

Se alguém manjar de shell script... =/

Compartilhar este post


Link para o post
Compartilhar em outros sites

O que exatamente quer fazer? Contar quantos dias faltam para uma data?

Você pode fazer isso pegando o número do dia do ano e fazendo a subtração.

 

Por exemplo:

 

date +%j

Retornará o dia do ano de hoje

 

 

Para saber o dia do ano da data informada:

 

date -d "2014-01-01" +%j

 

Depois é só comparar se o dia de hoje é menor que o informado. Se for, subtraia e terá a quantidade de dias até a data desejada.

Compartilhar este post


Link para o post
Compartilhar em outros sites

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...

Compartilhar este post


Link para o post
Compartilhar em outros sites

Você entendeu o que eu sugeri? Não é o que precisa?

Explique exatamente onde quer chegar. Qual é o objetivo do script e por que o atual não lhe serve?

 

Dica: use operadores AND e OR (-a e -o no Shell)

Compartilhar este post


Link para o post
Compartilhar em outros sites

Beraldo, entendi a sua ideia e vou tentar usa-la. O propósito e tentar melhorar esse script... acredito que não precise de todos esses ifs.

 

A minha intenção tbm era colocar uma validação caso ele não mande a data de nascimento.

 

$ ./script.sh

Dá um erro... validar isso.

 

$ ./script.sh 16/11/1987 (capturado na variável x=$1)

Compartilhar este post


Link para o post
Compartilhar em outros sites

A minha intenção tbm era colocar uma validação caso ele não mande a data de nascimento.

 

$ ./script.sh

Dá um erro... validar isso.

Pode validar usando $#, que retorna o número de parâmetros do script

 

 

if [ $# -ne 1 ]
then
    echo "Uso: $0 <data_de_nascimento>"
    exit 1
fi

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.