Cazzeri 1 Denunciar post Postado Outubro 22, 2014 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
Beraldo 864 Denunciar post Postado Outubro 23, 2014 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
Cazzeri 1 Denunciar post Postado Outubro 23, 2014 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/1987Caso 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
Beraldo 864 Denunciar post Postado Outubro 23, 2014 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
Cazzeri 1 Denunciar post Postado Outubro 24, 2014 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
Beraldo 864 Denunciar post Postado Outubro 24, 2014 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
Cazzeri 1 Denunciar post Postado Outubro 24, 2014 Boaa Beraldo :) Compartilhar este post Link para o post Compartilhar em outros sites