# [BASH] Triple contador incremental. (solucionado)

## Inodoro_Pereyra

Gente, necesito que me den una mano. Programar no es lo mío así que me explicaré en pseudo-código:

Necesito descargar muchas instancias de una página web. Cada una de estas páginas web contiene una fecha en su URL. Podría hacerlo a mano pero me va a llevar bastante tiempo y por eso recurro a Uds. Se que hay muchos que hacen magia con bash.

La URL de la página web es algo similar a esto: http://www.dominio.com/pagina.asp?dia=01&mes=03&anio=09

Necesito que el contador de días se incremente de a 3 y que cada 28/30/31 dias segun el mes, el contador de meses se incremente de a 1. Cada 12 meses, el contador de años se incremente en 1 (si no es mucho pedir)  :Very Happy: . En definitiva, algo como esto:

```
Funcion AÑO {

 Incrementar variable_año desde 2005 hasta 2009 de 1 en 1 

  Funcion MES {

   Incrementar variable_mes desde 1 hasta 12 de 1 en 1

    Funcion DIA {

      incrementar variable_dia desde 1 hasta 30 de 3 en 3

        wget  http://www.dominio.com/pagina.asp?dia=$variable_dia&mes=$variable_mes&anio=$variable_año

     }

   }

}

```

Todo eso teniendo en cuenta (de ser posible) la cantidad de días de cada mes:

   1. Enero, con 31 días

   2. Febrero, con 28 días

   3. Marzo, con 31 días

   4. Abril, con 30 días

   5. Mayo, con 31 días

   6. Junio, con 30 días

   7. Julio, con 31 días

   8. Agosto, con 31 días

   9. Septiembre, con 30 días

  10. Octubre, con 31 días

  11. Noviembre, con 30 días

  12. Diciembre, con 31 días

Desde ya muchas gracias. Luego de hacer click en el botón enviar, me pongo a buscar manuales de bash a ver que puedo ir adelantando yo por mi cuenta...

Salud!

----------

## pcmaster

A ver si te sirve esto: http://es.wikipedia.org/wiki/Bash

----------

## Stolz

```
#!/bin/bash

for year in `seq 2005 2009`; do

   for month in `seq -w 1 12`; do

      for day in `seq -w 1 3 31`; do

         wget "http://www.dominio.com/pagina.asp?dia=$day&mes=$month&anio=$year" -O ${year}-${month}-${day}.html

      done

   done

done

```

Si no quieres que se rellenen las cifras con 0 a la izquierda, quita el parámetro -w del comando seq.

He puesto que la cuenta de días llegue hasta 31 pero si quieres que llegue a 30 el cambio es trivial. Tendrás algunos días fantasma como el 31 de Febrero, pero creo que con lo que he puesto ya te ahorras bastante trabajo. Si quieres que las páginas que den fallo (por ejemplo por un error 404 -no encontrado-) no se guarden puedes cambiar la líena de wget por algo así:

```
wget "http://www.dominio.com/pagina.asp?dia=$day&mes=$month&anio=$year" -O ${year}-${month}-${day}.html  || rm ${year}-${month}-${day}.html
```

Para un caso más simple (con menos combinaciones que escribir) podrías haber usado las "expansiones" de la shell. Comprueba la magia de algo tan simple como

```
wget google.com/letter={a,b,c}/number={1,2,3}
```

Si necesitas algo más ya sabes  :Wink: 

Saludozzzzzzzzzz

----------

## Inodoro_Pereyra

Gracias stolz. Con tu script ya he solucionado el problema.

Salud!

----------

