LINUX.ORG.RU

Команда date в bash скриптах


0

0

Написал как-то скрипт для сбора статистики. В нем есть такие строки:

cur_mon=`date +%m`

и далее

let "cur_mon -= 1"

Он нормально работал с конца прощлого года. Но в этом месяце он чего-то сработал неверно. После выяснилось, что при значении cur_mon до 07 включительно последняя команда работает нормально, а при значении 08 (т.к. сейчас август) выдает ошибку:

let: 08: value too great for base (error token is "08")

Кто нибудь может мне обяснить в чем тут дело. И как следует писать в данном случае чтобы ошибки не возникало?


0 перед числом означает что оно в восьмеричной системе

юзай следующее

tmp_mon=`date +%m`

tmp_mon1=`echo $tmp_mon|dd bs=1 count=1 2>/dev/null|tr -d '0'`;

tmp_mon2=`echo $tmp_mon|dd bs=1 skip=1 count=1 2>/dev/null`;

let "cur_mon=tmp_mon1*10+tmp_mon2"

let "cur_mon -= 1"

arax ★★
()

man bash:

       Constants  with  a leading 0 are interpreted as octal numbers.  A leading 0x or 0X denotes hexadecimal.
       Otherwise, numbers take the form [base#]n, where base is a decimal number between 2 and 64 representing
       the  arithmetic  base, and n is a number in that base.  If base# is omitted, then base 10 is used.  The
       digits greater than 9 are represented by the lowercase letters, the uppercase letters,  @,  and  _,  in
       that  order.   If  base is less than or equal to 36, lowercase and uppercase letters may be used inter-
       changably to represent numbers between 10 and 35.


Живой пример:
~$ echo $((`date +%m`-1))
-bash: 08: value too great for base (error token is "08")

~$ echo $((10#`date +%m`-1))
7

Zulu ★★☆☆
()
Ответ на: комментарий от Zulu

> echo $((10#`date +%m`-1))

так каждый может

>что только люди не придумают, абы голову прежде рук не применять...

а голову беречь надо

arax ★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.