
Я новичок в программировании с помощью скрипта 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
.