
Sou novo em programação com script bash. Aqui está o meu problema: vou abrir uma espécie de dado cujo nome de arquivo inclui a data (formato:) file_yyyymmddhh.nc
. Existem alguns requisitos:
mm
é de 01 a 12. Deve ser um número inteiro de dois dígitos.dd
é de 01 a 28, 30 ou 31, dependendo do mês.
Tentei resolver o problema com estrutura if e loops. Eu sei que poderia usar algo assim para poder aplicar ${dd}
ao meu nome de arquivo.
if [${mm} == 01] ; then
for ((i=1; i<=31; i=i+1))
do
${dd}=i
done
fi
Mas não sei como especificar ${dd}
um número inteiro de 2 dígitos, especialmente quando ${dd} <= 9
. Existe alguma maneira de corrigir o código acima?
Responder1
Você pode usar printf
para formatar seus números. Aqui, %02d
denota um número inteiro de dois dígitos com zeros à esquerda, se apropriado.
dd=$(printf "%02d" $i)
Você pode estender isso para que se $y
, $m
, $d
e $h
contiver seus números de ano, mês, dia e hora, a construção possa se tornar esta
file=$(printf "file_%04d%02d%02d%02d.nc" $y $m $d $h)
Enquanto estamos aqui, sua construção ${dd}=i
está incorreta. O $
símbolo é prefixado na frente do nome de uma variável para obter o valor dessa variável (no seu caso, i
é a variável e $i
equivale ao seu valor). Então, no seu caso, você teria escrito dd=$i
.