Gostaria de ajudar?

sexta-feira, 8 de junho de 2012

Shell Script loop na data Dia/Mes/Ano

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

#/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 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!!

2 comentários :

  1. Cristiano,

    Acho 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!

    ResponderExcluir