shell-script-pt
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

RES: RES: [shell-script] como subtrair datas


From: Julio Cezar Neves - DATAPREVRJ
Subject: RES: RES: [shell-script] como subtrair datas
Date: Wed, 29 Jan 2003 11:44:18 -0300


-----Mensagem original-----
De: verde6666 [mailto:address@hidden]
Enviada em: quarta-feira, 29 de janeiro de 2003 10:36
Para: address@hidden
Assunto: Re: RES: [shell-script] como subtrair datas


oi julio,

andei brincando agora com seus scripts, são realmente geniais!

sobre o comentário do ano bissexto, eu **acho** que achei
a parte que trata disso no primeiro script, mas minha cabeça
dói quando pensa em datas, sou horrível nisso...


> cat dton.sh
> TotDias=$((1 + 365 * (AFim - 1980) + (AFim - 1980) / 4))
> [ $((AFim % 4)) = 0 -a $MFim -le 2 ] && TotDias=$((TotDias - 1))

acho que é esta linha né? ^^^^

Exatamente! na 1a linha, (AFim - 1980) / 4 soma a qtd de dias bissextos à
qtd de dias decorridos e na segunda, subtraio um caso o ano atual seja
bissexto, porém o mes é menor que fev.

> [ $MFim -ne 1 ] &&
> for i in `echo "31 28 31 30 31 30 31 31 30 31 30 31" | cut -f-
$((MFim - 1)) -d" " 2> /dev/null`
> do
>         TotDias=$((TotDias + $i))
> done
> echo $((TotDias + DFim))

se você me permite, gostaria de sugerir uma pequena alteração
na linha do for, pra que fique menor.

se você adicionar um espacinho antes do 31 do mes de janeiro,
não precisa fazer o $((MFim - 1)) no cut, pode ficar direto:

for i in `echo " 31 28 31 30 31 30 31 31 30 31 30 31" | cut -f-$MFim 
-d" "`

(tirei tb o /dev/null, pois o cut sempre receberá valores OK)

e outra, além disso, o condicional do mês, pra só executar o
for se não for Janeiro  "[ $MFim -ne 1 ] &&" , também não
precisa mais, pois o cut -f-1 irá retornar um espaço em branco
(aquele, que acabamos de por) e o loop for não será executado.
então esse trecho todo poderia ser simplificado para:

for i in `echo " 31 28 31 30 31 30 31 31 30 31 30 31" | cut -f-$MFim -
d" "`
do
         TotDias=$((TotDias + $i))
done
echo $((TotDias + DFim))

Realmente sensacional! Isto é a ótica de quem tem uma visão ampla e não se
sujeita ao convencional. Valeu Aurelio!!

testei no bash e deu certo, creio no ksh também não deve ter
problema.

Ainda não testei, mas certamente não terá..

falou!
Falou!!



reply via email to

[Prev in Thread] Current Thread [Next in Thread]