Немного неясно, о чем ты просишь. Если вы хотите убрать только один начальный ноль, то это будет делать:
month=${month#0}
Это превратит 02
в 2
, а 12
останется 12
.
Если вам нужно удалить более одного нуля (значение выше 002
превратится в 02
), вам нужно будет сделать что-то другое, например, использовать регулярные выражения
while [ -z "${month##0*}" ]; do month=${month#0}; done
или используйте регулярные выражения, как с sed
month=$(sed -e 's/^0*//'<<<"$month")
НТН
EDIT
Согласно вашему редактированию; как уже было предложено, используйте printf
month=$(printf %02d "$month")
это превратит 2
в 02
, 12
останется без изменений, как и 123
. Если вы хотите ввести двузначное число или у вас нет printf
(который является встроенной в bash оболочкой и обычно также доступен в других случаях, так что шансы довольно малы), sed
может помочь снова
month=$(sed -e 's/.*\(..\)$/\1/'<<<"00$month")
, который будет предшествовать двум нулям (002
) и содержать последние два символа (02
), превращая пустую строку в 00
. Это тоже превратит a
в 0a
. Если подумать, вам не нужно sed
для этого
month="00$month"
month="${month:0-2}"
(0-
требуется для устранения неоднозначности при расширении значения по умолчанию)