Estes dias eu estava querendo fazer o "loop" em um script shell que possibilitasse variar o mês e o dia com doi algarismos, ou seja, 01, 02, 03, 04 sempre que eu tentava o loop variava 1, 2, 3, 4 e etc. Deve exister algumas outras formas de fazer isto, mas essa foi a que conseguir fazer, espero que ajude.
OBS: Meu amigo Alex Pessoa, fez uma sugestão para melhorar este script, segue!!
OBS: Meu amigo Alex Pessoa, fez uma sugestão para melhorar este script, segue!!
#/bin/sh
for ano in $(seq 2000 2004);do
for mes in $(seq -f %02g 1 12);do
ultimo_dia=`echo $(cal $mes $ano) | awk '{print $NF}'`; #-> linha nova
for dia in $(seq -f %02g 1 $ultimo_dia);do #-> modificado
for dia in $(seq -f %02g 1 $ultimo_dia);do #-> modificado
# for dia in $(seq -f %02g 1 31);do #desta forma todos os meses vão até 31
echo "$ano$mes$dia"
done
done
done
o resultado deste script é:
20000101
20000102
. . .
. . .
. . .
20041231
è isso ae.
Boa Sorte e Bom Trabalho a Todos!!
Cristiano,
ResponderExcluirAcho que tenho uma solução mais legal que não dá problemas quando o mês tem 28 ou 31 dias:
> start_date=20150101
> i=1
> data=${start_date}
> end_date=20151231
> while [ $data -lt ${end_date} ] ; do
> data=`date +%Y%m%d -d "${start_date}+${i} days"`
> ano=`date +%Y -d "${start_date}+${i} days"`
> mes=`date +%m -d "${start_date}+${i} days"`
> dia=`date +%d -d "${start_date}+${i} days"`
> i=$[$i+1]
> echo "${ano}${mes}${dia}"
> done
O resultado será:
20150102
20150103
20150104
20150105
20150106
...
20150130
20150131
20150201
20150202
...
20150227
20150228
20150301
20150302
...
20151231
Abração!
Valeu João Hackerott,
ExcluirAbração,
Cristiano