The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]

форумы  помощь  поиск  регистрация  вход/выход  слежка  RSS
"Простейшая арифметика."
Вариант для распечатки  
Пред. тема | След. тема 
Форум Открытые системы на сервере (Системное и пользовательское ПО / Linux)
Изначальное сообщение [ Отслеживать ]

"Простейшая арифметика."  +/
Сообщение от stakado email(ok) on 17-Мрт-09, 14:28 
Здравствуйте!
То ли от долгого сидения за черным экраном, то ли из-за недостатка знаний не могу выполнить простейшую арифметическую операцию - сложить переменную с числом. Вот скрипт:
[root@gtw new_router]# cat 1.sh
#!/bin/bash

tmp="07"
echo "1. tmp + 1 = $[ $tmp + 1 ]"
tmp="08"
echo "2. tmp + 1 = $[ $tmp + 1 ]"

А вот результат выполнения скрипта:
[root@gtw new_router]# ./1.sh
1. tmp + 1 = 8
./1.sh: line 6: 08: value too great for base (error token is "08")

Укажите, пожалуйста, на ошибку.

Ответить | Правка | Cообщить модератору

Оглавление

Сообщения по теме [Сортировка по времени | RSS]


1. "Простейшая арифметика."  +/
Сообщение от Andrey Mitrofanov on 17-Мрт-09, 14:37 
>tmp="08"

<tmp="^----указываю. Не за что.

( ^--- - это _стрелочка_, да-а-а?)

>./1.sh: line 6: 08: value too great for base (error token is
>"08")
>Укажите, пожалуйста, на ошибку.

Ответить | Правка | ^ к родителю #0 | Наверх | Cообщить модератору

2. "Простейшая арифметика."  +/
Сообщение от stakado email(ok) on 17-Мрт-09, 14:44 
>>tmp="08"
>
><tmp="^----указываю. Не за что.
>
>( ^--- - это _стрелочка_, да-а-а?)
>
>>./1.sh: line 6: 08: value too great for base (error token is
>>"08")
>>Укажите, пожалуйста, на ошибку.

Наскока я понял указывает эта стрелочка на "0". Почему тогда "07" работает? Везде утверждается, что переменные в баше не имеют типа. Так что "08" и "8" должны быть идеинтичны. С просто "8" пробовал, работает оно, но мне без этого нуля впереди ну никак не обойтись.
Есть ли какие-нить методики, чтобы побороться с этим?

Ответить | Правка | ^ к родителю #1 | Наверх | Cообщить модератору

3. "Простейшая арифметика."  +/
Сообщение от Andrey Mitrofanov on 17-Мрт-09, 14:56 
>Наскока я понял указывает эта стрелочка на "0".

Ну, в общем, да. Корректенее было бы, наверное на "08" целиком указать...
И сообщение об ошибке тебе на него "указывало", жаль стрелочек не рисовало.

> Почему тогда "07" работает?

077 попробуй. Выводы?

>Везде утверждается, что переменные в баше не имеют типа.
>Так что "08" и "8" должны быть идеинтичны.

Если это переменные, то я Дональд Кнут.

>но мне без этого нуля впереди ну никак не обойтись.
>Есть ли какие-нить методики, чтобы побороться с этим?

С чем? С "ну никак не"?... Медитация, аутотренинт, выработка храрактера.

ЗЫ: Убойнейшая мантра для медитационной закалки характера:
man bash

Ответить | Правка | ^ к родителю #2 | Наверх | Cообщить модератору

4. "Простейшая арифметика."  +/
Сообщение от stakado email(ok) on 17-Мрт-09, 15:13 
>[оверквотинг удален]
>
>Если это переменные, то я Дональд Кнут.
>
>>но мне без этого нуля впереди ну никак не обойтись.
>>Есть ли какие-нить методики, чтобы побороться с этим?
>
>С чем? С "ну никак не"?... Медитация, аутотренинт, выработка храрактера.
>
>ЗЫ: Убойнейшая мантра для медитационной закалки характера:
>man bash

В общем-то Андрей спасибо, не раз с Вами сталкиваюсь на просторах форума опеннета, Вы как всегда очень красноречивы, вот тока толка от ваших советов маловато. Уподобляться Вам не стану, лишь опишу решение (как написано в правилах форума).

Проблема решилась с помощью Яндекса.
Заключалась она в том, что баш по какой-то неведомой мне причине (наверное дефолты такие или 0 впереди на это указывает) воспринимал мою переменную как 8ричную и соответственно числа 8 существовать в ней не может. Для того, чтобы баш воспринимал переменную как 10чную необходимо указать ему это явным образом - 10#$tmp. Пример исправленного скрипта:
[root@gtw new_router]# cat 1.sh
#!/bin/bash

tmp="07"
echo "1. tmp + 1 = $[ $tmp + 1 ]"
tmp="08"
echo "2. tmp + 1 = $[ 10#$tmp + 1 ]"

И результат выполнения:
[root@gtw new_router]# ./1.sh
1. tmp + 1 = 8
2. tmp + 1 = 9

Ответить | Правка | ^ к родителю #3 | Наверх | Cообщить модератору

5. "Простейшая арифметика."  +/
Сообщение от Andrey Mitrofanov on 17-Мрт-09, 15:46 
>В общем-то Андрей спасибо, не раз с Вами
>Проблема решилась с помощью Яндекса.
>как 10чную необходимо указать ему это явным образом - 10#$tmp

Ну, что Вы, это Вам спасибо: я не знал.
man bash - каждый раз либо что-то новое, либо что-то пропустил.

Ответить | Правка | ^ к родителю #4 | Наверх | Cообщить модератору

6. "Простейшая арифметика."  +/
Сообщение от angra (ok) on 17-Мрт-09, 15:55 
Ну конечно яндекс это проще чем man bash. Ну и остаются в памяти глупые мысли про дефолты и шаманские заклинания. Андрей действительно витиевато выражается и, о ужас, требуется чуть-чуть напрячь извилины дабы понять куда он клонит. Многим это удается и для них толк от советов Андрея есть. Но некоторым конечно сложить вместе указание на base от bash, указание на 0 и предложение попробовать с 077(на выходе будет 64, оно же 0100 в восьмеричной) наверное действительно оказалось слишком сложно.
Ответить | Правка | ^ к родителю #4 | Наверх | Cообщить модератору

7. "Простейшая арифметика."  +/
Сообщение от Владимир (??) on 14-Ноя-16, 11:33 
> В общем-то Андрей спасибо, не раз с Вами сталкиваюсь на просторах форума
> опеннета, Вы как всегда очень красноречивы, вот тока толка от ваших
> советов маловато. Уподобляться Вам не стану, лишь опишу решение (как написано
> в правилах форума).

Спасибо тебе, добрый человек. Сколько же ты мне времени сэкономил.. В отличии от ответов выше..

Ответить | Правка | ^ к родителю #4 | Наверх | Cообщить модератору

Архив | Удалить

Рекомендовать для помещения в FAQ | Индекс форумов | Темы | Пред. тема | След. тема




Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2024 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру