Вы можете выполнить множественное сопоставление регулярных выражений в своем выражении case, т.е.
case $m in
01|1|jan*|Jan*) m=1 ;;
02|2|feb*|Feb*) m=2 ;;
....
Иначе, вы можете использовать подстановку параметров оболочки для удаления любых ведущих нулей, т. Е.
# as a way to demonstrate param sub on $1 etc, load values to $1 and $2
set -- 01 02
echo ${1#0}
echo ${2#0}
# output
1
2
Редактировать
По вашему последующему вопросу
Например, текущий месяц - ноябрь 2005 г. Если вы запустили "cal 01", вы должны распечатать календарь на январь 2006 г.
Попробуйте это:
# if the month input is less than the current month, assume the next year
if (( ${y:-0} == 0 && m < $(/bin/date +%m) )) ; then
y=$(/bin/date +%Y)
((y++))
fi
${y:-0}
- это один из нескольких синтаксисов проверки параметров, предоставляемых большинством оболочек, который позволяет заменить значение по умолчанию, если значение var полностью не задано (не задано вообще) или = "". Таким образом, в этом случае, если y
не был задан в командной строке, он будет отображаться как 0 в этой оценке, что позволит выполнить раздел &&
для проверки месяца и т. Д.
Вам нужно будет расширить обработку case $#
, чтобы учесть 1 аргумент, который считается значением месяца.
Надеюсь, это поможет.