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

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

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

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

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

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

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

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

решение1

Вы можете использовать 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.

Связанный контент