LINUX.ORG.RU

[bash] 08: value too great for base (error token is «08»)

 


0

0

Есть скрипт (Хитрый велоси^таймер) в котором есть строки

 MINUTESYS1=`date +%M`
        if [ $VAR1 -eq $MINUTESYS1 ] ; then # строка 300
            VAR1=`echo $(($MINUTESYS1 + $WAIT))` # строка 301 соответственно
            CallRunProg
        else
            blablabal
WAIT=[0-60] время в минутах через которое надо запускать функцию CallRunProg

Временами вылетает такая вот ошибка.

Tue, 31 Aug 2010 22:07:09 +0700 Runtimer.bsh[26323]:(root) RUN (run-parts /etc/runtimer/workfolder ) successfully!
./Runtimer.bsh: line 301: 08: value too great for base (error token is "08")
Tue, 31 Aug 2010 22:08:09 +0700 Runtimer.bsh[26323]:(root) RUN (run-parts /etc/runtimer/workfolder ) successfully!
./Runtimer.bsh: line 300: [: -eq: ожидается использование унарного оператора
./Runtimer.bsh: line 300: [: -eq: ожидается использование унарного оператора

Понятно что переменная VAR1 почему то не присвоилась в один прекрасный момент. И в основной это случается когда значение переменной MINUTESYS1 равно 08. Кто нибудь знает как это можно поправить?



Последнее исправление: pavel38 (всего исправлений: 1)

bash очевидно не понимает 08 вместо 8, потому что 0 в начале означает, что это число в восьмеричном виде. А 08 не может существовать в восьмеричном виде. Используй expr.

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

bash очевидно не понимает 08 вместо 8, потому что 0 в начале означает, что это число в восьмеричном виде. А 08 не может существовать в восьмеричном виде. Используй expr.

В принципе я к этому и склонялся, гугл говорит что то тоже в этом духе. Но expr как я помню внешняя утилита, хотелось бы все таки средствами баша.

Значит придется юзать expr

pavel38
() автор топика
Ответ на: комментарий от alex_custov

Так самое интересное, 50/50 % он то материться на 08 то нет. Бред ?

echo $BASH_VERSION
3.2.48(1)-release

pavel38
() автор топика
Ответ на: комментарий от pavel38

Привычка в консоле писать echo $((250 * 37) например

избавляйтесь писать такое (`echo $((...))`) в скриптах. лишений поток создаете...

по делу:

# MINUTESYS1=08
# echo $MINUTESYS1
08
# MINUTESYS1=${MINUTESYS1#0}
# echo $MINUTESYS1
8

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