vamos por membros esvicerados:

Vc tem uma data no formato: DD/MM/YYYY HH:MI:SS
Vc quer saber:
a) se esta data é um fim de semana e
b) se está dentro (ou fora) do intervalo 6:30-18:30

optei por usar awk que é o que eu mais conheço. a primeira coisa que
eu precisa saber era se a data era um fim de semana. pesquisando
descobri a função

strftime("formato", data-hora)

esta função retorna a data-hora em um formato que eu defino. descobri
que, se usar %a, eu tenho o dia da semana com tres caracteres. Ora,
pra saber se é sabado ou domingo agora é uma barbada!

entretanto esta data-hora não é no formato que vc informa. eu preciso
criar uma usando o mktime() e os seus parametros. vc informa
DD/MM/YYYY HH:MI:SS e o mktime requer
YYYY/MM/DD HH:MI:SS, então criou-se uma polêmica.

se eu informar ao awk que o separador de campo é espaço, ':' e '/'
(pus um tab também, vai que tenha em algum lugar) e ler a sua string,
eu consigo converter fazendo

date=$3" "$2" "$1" "$4" "$5" "$6

Agora vem o pulo do gato!

weekday=strftime("%a",mktime(date))
if(weekday == "Sun" || weekday == "Sat"){
   # a data informada eh um fim de semana!
}

Agora vem a parte "dificil". como saber se a hora esta dentro (ou
fora) do intervalo que vc deseja. Uma forma ao meu ver simples é
converter a hora em segundos desde a meia noite. assim se eu quero
saber se a hora x:y:z esta entre 6:30:00 e 18:30:00 eu faço

sec_day = x * 60 * 60 + y * 60 + z
sec_up   = 6 * 60 * 60 + 30 * 60 + 0
sec_down = 18 * 60 * 60 + 30 * 60 + 0

fariamos um teste assim:
if((sec_day <  sec_up)||(sec_day > sec_down)){
# se o numero de segundos for menor que a hora mais 'cedo' (chamei de
sec_up por
#alguma loucura da minha cabeça) OU for maior que a hora mais 'tarde'
(idem, sec_down)
#a hora informada esta fora do periodo
} else {
  # esta dentrio do periodo
}

como as contas de 'hora' sao repetitivas, criei uma função que converte.

Espero que atenda às suas necessidades.

Em 12/06/06, rafael.nery<[EMAIL PROTECTED]> escreveu:
> Tiago Barcellos Peczenyj,
> Agora fiquei confuso no que vc fez...
> Ficou muito complexo.
> #!/bin/bash
> # le uma data no formato DD/MM/YYYY HH:MI:SS
> # caso o dia seja um fim de semana : sab/dom
> # e esteja fora da faixa 6:30:00 a 18:30:00
> # imprime algo
>
> echo "$@" | awk -F"[ \t:/]" '
> function seconds(h,m,s){ # retorna o numero de segundos dessa hora !
>         return 60*(60*h + m)+s;
> }
>
> {
>         date=$3" "$2" "$1" "$4" "$5" "$6
>         weekday=strftime("%a",mktime(date))
>
>         sec_day  = seconds($4,$5,$6)
>         sec_down = seconds(18,30,00)
>         sec_up   = seconds( 6,30,00)
>
>         if(weekday == "Sun" || weekday == "Sat"){
>                 #print "final de semana"
>                 if((sec_day <  sec_up)||(sec_day > sec_down)){
>                         # acho que eh isso que vc quer, senao eh so
> alterar o if!
>                         print "fora do horario"
>                 }
>         }
> }'
>
>
> Em 09/06/06, rafael.nery<[EMAIL PROTECTED]> escreveu:
> > Pessoal,
> > A variavel DATE, uma data no formato:
> > DD/MM/YYYY HH:MI:SS.
> > Como posso fazer um script para verificar se ela está entre 18:30 e 6:30 e 
> > se o dia não é final de semana.
> >  Estou tentando algo do tipo:
> > #!/bin/bash
> > horaAtual="date"
> > hora1="18:30"
> > hora2="06:30"
> > data="date +%a"
> > if  [ "$horaAtual" -ge "$hora1"  -a   "$horaAtual" -le "$hora2" -a
> > then
> > echo "nao"
> > exit1
> > #else "sim"
> > fi
> >
> > Mas nào está funcionando e falta tb o dia.
> > Alguém me ajuda?
> > Obrigado,
> > Rafael.
> >
> >
> >
>
>
>
> ---------------------------------------------------------------------
> Esta lista não admite a abordagem de outras liguagens de programação, como 
> perl, C etc. Quem insistir em não seguir esta regra será moderado sem prévio 
> aviso.
> ---------------------------------------------------------------------
> Sair da lista: [EMAIL PROTECTED]
> ---------------------------------------------------------------------
> Esta lista é moderada de acordo com o previsto em 
> http://www.listas-discussao.cjb.net
> ---------------------------------------------------------------------
> Servidor Newsgroup da lista: news.gmane.org
> Grupo: gmane.org.user-groups.programming.shell.brazil
>
>
> Links do Yahoo! Grupos
>
>
>
>
>
>
>
>


-- 
Tiago B Peczenyj
Linux User #405772

# cd /pub
# more beer


---------------------------------------------------------------------
Esta lista não admite a abordagem de outras liguagens de programação, como 
perl, C etc. Quem insistir em não seguir esta regra será moderado sem prévio 
aviso.
---------------------------------------------------------------------
Sair da lista: [EMAIL PROTECTED]
---------------------------------------------------------------------
Esta lista é moderada de acordo com o previsto em 
http://www.listas-discussao.cjb.net
---------------------------------------------------------------------
Servidor Newsgroup da lista: news.gmane.org
Grupo: gmane.org.user-groups.programming.shell.brazil

 
Links do Yahoo! Grupos

<*> Para visitar o site do seu grupo na web, acesse:
    http://br.groups.yahoo.com/group/shell-script/

<*> Para sair deste grupo, envie um e-mail para:
    [EMAIL PROTECTED]

<*> O uso que você faz do Yahoo! Grupos está sujeito aos:
    http://br.yahoo.com/info/utos.html

 



Responder a