Pergunta sobre estrutura e loops

Pergunta sobre estrutura e loops

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 printfpara formatar seus números. Aqui, %02ddenota 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, $de $hcontiver 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}=iestá 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 $iequivale ao seu valor). Então, no seu caso, você teria escrito dd=$i.

informação relacionada