Pergunta sobre se estrutura e loops

1

Eu sou novo em programação com o script bash. Aqui está o meu problema: eu vou abrir uma espécie de dados cujo nome de arquivo inclui a data (formato: file_yyyymmddhh.nc ). Existem alguns requisitos:

  • mm é de 01 a 12. Esse deve ser um número inteiro de dois dígitos.

  • dd é de 01 a 28, 30 ou 31, dependendo do mês.

Eu tentei resolver o problema com estrutura e loops. Eu sei que eu poderia usar algo assim para que eu possa 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} como um inteiro de dois dígitos, especialmente quando ${dd} <= 9 . Existe alguma maneira de corrigir o código acima?

    
por Wayne Tsai 17.05.2016 / 17:58

1 resposta

2

Você pode usar printf para formatar seus números. Aqui, o %02d indica um 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 contiverem seus números de ano, mês, dia e hora, a construção possa se tornar essa

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 de um nome de 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 .

    
por 17.05.2016 / 18:36