Pregunta sobre si estructura y bucles.

Pregunta sobre si estructura y bucles.

Soy nuevo en programación con script bash. Aquí está mi problema: voy a abrir un tipo de datos cuyo nombre de archivo incluye la fecha (formato:) file_yyyymmddhh.nc. Hay algunos requisitos:

  • mmes de 01 a 12. Debe ser un número entero de dos dígitos.

  • ddes del 01 al 28, 30 o 31, dependiendo del mes que sea.

Intenté resolver el problema con la estructura if y los bucles. Sé que podría usar algo como esto para poder aplicarlo ${dd}a mi nombre de archivo.

if [${mm} == 01] ; then 
  for ((i=1; i<=31; i=i+1))
  do 
    ${dd}=i
done
fi

Pero no sé cómo especificar ${dd}que sea un número entero de 2 dígitos, especialmente cuando ${dd} <= 9. ¿Hay alguna manera de arreglar el código anterior?

Respuesta1

Puede utilizar printfpara formatear sus números. Aquí %02ddenota un número entero de dos dígitos con ceros a la izquierda, si corresponde.

dd=$(printf "%02d" $i)

Puede extender esto para que si $y, $m, $dy $hcontienen los números de año, mes, día y hora, la construcción pueda convertirse en esto

file=$(printf "file_%04d%02d%02d%02d.nc" $y $m $d $h)

Mientras estamos aquí, su construcción ${dd}=ies incorrecta. El $símbolo tiene como prefijo delante del nombre de una variable para obtener el valor de esa variable (en su caso, ies la variable y $iequivale a su valor). Entonces, en su caso, habría escrito dd=$i.

información relacionada