Значение переменной вывести в название другой переменной.

Здесь выкладываем скрипты
Правила форума
Уважаемые Пользователи форума, обратите внимание!
Ни при каких обстоятельствах, Администрация форума, не несёт ответственности за какой-либо, прямой или косвенный, ущерб причиненный в результате использования материалов, взятых на этом Сайте или на любом другом сайте, на который имеется гиперссылка с данного Сайта. Возникновение неисправностей, потерю программ или данных в Ваших устройствах, даже если Администрация будет явно поставлена в известность о возможности такого ущерба.
Просим Вас быть предельно осторожными и внимательными, в использовании материалов раздела. Учитывать не только Ваши пожелания, но и границы возможностей вашего оборудования.
23q
Сообщения: 57
Зарегистрирован: 16 май 2013, 11:21

vqd писал(а):
23q писал(а):сам спросил-сам ответил. :ne_vi_del:

Код: Выделить всё

:execute ":global $1";


execute это больше для отладки

Для подобных вещей существует :parse

Код: Выделить всё

[admin@Meg_Router] >  :global tmp test          
[admin@Meg_Router] > [:parse ":global $tmp 456"]
[admin@Meg_Router] > environment print         
test=456
tmp="test"

спасибо. после того, как мы ее таким образом создали, как потом новую переменную обработать в скрипте, например сравнив со значением?


vqd
Модератор
Сообщения: 3605
Зарегистрирован: 26 сен 2013, 14:20
Откуда: НСК
Контактная информация:

не понял вопроса

Код: Выделить всё

[admin@Uzer-1100] > :global tmp test          
[admin@Uzer-1100] > [:parse ":global $tmp 456"]
[admin@Uzer-1100] > :put ($test > 500)           
false



Есть интересная задача и бюджет? http://mikrotik.site
23q
Сообщения: 57
Зарегистрирован: 16 май 2013, 11:21

vqd писал(а):не понял вопроса

Код: Выделить всё

[admin@Uzer-1100] > :global tmp test          
[admin@Uzer-1100] > [:parse ":global $tmp 456"]
[admin@Uzer-1100] > :put ($test > 500)           
false



допустим есть скрипт.

Код: Выделить всё

:global tmp test; 
:log info $tmp
[:parse ":global $tmp 456"]
:if ($test > 500) do={log info 1} else={log info 2}

как сделать так, что-бы изменять в этом скрипте имя "test" только один раз, в строчке ":global tmp test;", а дальше все отработало как надо. В данном же случае нужно изменять это имя в двух строках: ":global tmp test;" и ":if ($test > 500) do={log info 1} else={log info 2}"


vqd
Модератор
Сообщения: 3605
Зарегистрирован: 26 сен 2013, 14:20
Откуда: НСК
Контактная информация:

После того как вы создали переменную имя ее изменить нельзя, только пересоздать с новым именем

Не буду спрашивать зачем ибо как то сам писал скрипт который генерирует скрипт для системы агригации в зависимости от количества подключенных внешних каналов


Есть интересная задача и бюджет? http://mikrotik.site
ERge
Сообщения: 12
Зарегистрирован: 02 фев 2016, 03:52

может типа так?

Код: Выделить всё

[:parse ":if ($tmp > 500) do={log info 1} else={log info 2}"]


PS: не пойму только для чего такое вообще надо!?


enternight
Сообщения: 6
Зарегистрирован: 01 сен 2017, 11:57

на микроте командой /interface ethernet print stats from=WAN выдается статистика по порту
там есть параметр rx-bytes
у него значение указывается с пробелом
например 17 280 997 853
как его перевести в человеческий вид 17280997853 чтоб потом можно было как с нормальным числом работать?

Код: Выделить всё

[enter@enter] > :global rxbyte [/interface ethernet get WAN rx-bytes];
[enter@enter] > :put $rxbyte;                                         
17 575 300 924

подсмотрел в hex-редакторе
пробел между цифрами - это значение 20


Аватара пользователя
podarok66
Модератор
Сообщения: 4355
Зарегистрирован: 11 фев 2012, 18:49
Откуда: МО

enternight писал(а):как его перевести в человеческий вид 17280997853 чтоб потом можно было как с нормальным числом работать?

Если первоначально подойти по-человечески, то и на выходе будет получаться число:

Код: Выделить всё

:global rxbyte [/interface get [/interface find name=WAN] rx-bytes];

Вроде как в каждой конфигурации подсказку увидеть можно. Хотя, признаться, сначала я тоже подвис, повторив вашу команду ;;-)))


Мануалы изучил и нигде не ошибся? Фаервол отключил? Очереди погасил? Витая пара проверена? ... Тогда Netinstal'ом железку прошей и настрой ее заново. Что, все равно не фурычит? Тогда к нам. Если не подскажем, хоть посочувствуем...
enternight
Сообщения: 6
Зарегистрирован: 01 сен 2017, 11:57

Спасибо большое за ответ, но что то пошло не так

Код: Выделить всё

[enter@enter home 815] > :global rxbyte [/interface get [/interface find name=WAN] rx-bytes]         
input does not match any value of value-name

Если попробовать подставить пропущенный "ethernet", тогда получается, но смысл не меняется, опять те же пробелы.

Код: Выделить всё

[enter@enter home 815] > :global rxbyte [/interface ethernet get [/interface find name=WAN] rx-bytes]
[enter@enter home 815] > environment print                                                           
rxbyte={"92 347 739"}

[enter@enter home 815] > :put $rxbyte                                                               
92 347 739


Аватара пользователя
podarok66
Модератор
Сообщения: 4355
Зарегистрирован: 11 фев 2012, 18:49
Откуда: МО

Код: Выделить всё

 {:local rx [/interface get [find name=ether4] rx-byte] ; 
:put $rx}
40353642210

Ага, вот эта ошибочка вкралась при переносе строки. Вместо rx-bytes надо использовать rx-byte


Мануалы изучил и нигде не ошибся? Фаервол отключил? Очереди погасил? Витая пара проверена? ... Тогда Netinstal'ом железку прошей и настрой ее заново. Что, все равно не фурычит? Тогда к нам. Если не подскажем, хоть посочувствуем...
enternight
Сообщения: 6
Зарегистрирован: 01 сен 2017, 11:57

Огромное спасибо!
Если не трудно, поясните мне, что я делал не так? Можно и в личку, но я думаю, этот пример еще кому то кроме меня может стать поучительным!

Код: Выделить всё

[enter@enter home 815] > :global rxbyte [/interface get [find name=WAN] rx-byte]   
[enter@enter home 815] > :put $rxbyte                                           
6769235359


Ответить