1

У меня есть этот скрипт:

day=`date +%d`
month=`date +%m`
year=`date +%Y`
lmonth=`expr $month - 1`
if test "$lmonth" = "0"
then lmonth=12
year=`expr $year - 1`
fi

Результат, когда я называю $lmonth/$year - 9/2012 Как я могу сделать так, чтобы он 09/2012?

Когда месяц 10, 11 или 12, я не хочу, чтобы он был 010, 011 или 012 соответственно.

Я хочу указать $ year и $ lmonth, когда я вызываю таблицу или файл с точкой. Например, table_extra201209.

Как добавить дополнительный ноль для месяцев с 1 (январь) до 9 (сентябрь)?

Я пытаюсь все ответы здесь, но ммм .. Я забыл упомянуть кое-что .. Я хочу указать $ year и $ lmonth, когда я вызываю таблицу или файл с помощью periode, например table_extra201209, как поместить его с помощью "0" перед "9" ..? еще раз спасибо :)

2 ответа2

2
$ month=5; year=2012 
$ perl -e 'printf"%02d/%04d\n",@ARGV' $month $year
05/2012

Я не помню, есть ли у Bash функция printf или sprintf, она, вероятно, имеет что-то такое же полезное.


Да, Баш делает

$ month=5
$ year=2012
$ printf "%02d/%04d\n" $month $year
05/2012

или, если вам нужен результат в переменной, используйте -v

$ printf -v expiry "%02d/%04d" $month $year
$ echo  $expiry
05/2012

Кроме того, вам не нужно вызывать date так много раз

$ d=$(date '+%Y %m %d %H %M %S')
$ a=( $d )
$ echo ${a[0]}
2012
$ echo ${a[1]}
10
$ echo ${a[2]}
30
$ echo ${a[3]}
09
$ echo ${a[4]}
59
$ echo ${a[5]}
31

Наконец, date само по себе часто может дать вам то, что вы хотите

$ minsec=$(date "+%M/%S")
$ echo $minsec
03/27

Вы, вероятно, знаете это, но если вы уменьшаете месяц, вы можете разрешить 1 - 1 = 12, уменьшить год и проверить, находится ли номер дня в диапазоне (не 31 февраля, не 29 февраля, если не високосный год, учитывая изменения календаря в различные даты в разных местах). Часто лучше использовать язык сценариев с хорошими модулями обработки дат.

1

Вы можете проверить, является ли число меньше 10, и только в этом случае добавьте 0 перед ним. Итак, попробуйте добавить следующее в ваш скрипт:

[ $lmonth -lt 10 ] && lmonth=0$lmonth

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .