Вопрос о структуре и циклах

Я новичок в программировании с помощью скрипта bash. Вот моя проблема: я собираюсь открыть file_yyyymmddhh.nc то данные, имя файла которых включает дату (format: file_yyyymmddhh.nc ). Существуют некоторые требования:

  • mm составляет от 01 до 12. Это должно быть двухзначное целое число.

  • dd составляет от 01 до 28, 30 или 31, в зависимости от того, в каком месяце.

Я попытался решить проблему с помощью структуры и циклов. Я знаю, что могу использовать что-то вроде этого, чтобы я мог применить ${dd} к моему имени файла.

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

Но я не знаю, как указать ${dd} как двузначное целое число, особенно когда ${dd} <= 9 . Есть ли способ исправить код выше?

Вы можете использовать printf для форматирования ваших номеров. Здесь %02d обозначает двухзначное целое число с ведущими нулями, если это необходимо.

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

Вы можете расширить это, чтобы в случае, если $y , $m , $d и $h содержат ваши числа в год, месяц, день и час, конструкция может стать

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

Пока мы здесь, ваша конструкция ${dd}=i неверна. Символ $ префикс перед именем переменной, чтобы получить значение этой переменной (в вашем случае i – переменная, а $i – ее значение). Итак, в вашем случае вы бы вместо этого написали dd=$i .