
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:
mm
es de 01 a 12. Debe ser un número entero de dos dígitos.dd
es 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 printf
para formatear sus números. Aquí %02d
denota 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
, $d
y $h
contienen 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}=i
es incorrecta. El $
símbolo tiene como prefijo delante del nombre de una variable para obtener el valor de esa variable (en su caso, i
es la variable y $i
equivale a su valor). Entonces, en su caso, habría escrito dd=$i
.