Пара полезный приемов при написании скрипта

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

Re: Пара полезный приемов при написании скрипта

Сообщение vqd » 21 авг 2014, 19:32

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

Re: Пара полезный приемов при написании скрипта

Сообщение 23q » 21 авг 2014, 22:43

та не, я их не запускал вообще :-)
я запускал:

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

:global aaa;
if condition=([/typeof $aaa] = "nothing") do={log info pusto} else={log info nepusto}

работает...
добавление "condition=" помогло.
leon_serv
Сообщения: 2
Зарегистрирован: 29 окт 2014, 22:32

Re: Пара полезный приемов при написании скрипта

Сообщение leon_serv » 13 ноя 2014, 23:36

Обнаружил недоработку, не знаю куда писать, может эту тему переименовать и пополнять?
Если надо в скрипте указать в /ip route более одного gateway/

У меня будет три канала ISP.
Пишу скрипт проверки доступности, по результатам меняю gateway в /ip route.

Вводим в консоли
/ip route set [find comment="AllWorkRoute"] gateway=192.168.11.1,192.168.30.1;
Все работает (ну понятно коммент должен быть у маршрута), прописывается два gateway

Теперь берем переменные FirstIfInetGW ThirdIfInetGW
[admin@UtitradeU] > :put $FirstIfInetGW
192.168.11.1
[admin@UtitradeU] > :put $ThirdIfInetGW
192.168.30.1

И обнаруживаем что с переменными задать два и более gateway нельзя:

------------------
[admin@UtitradeU] > /ip route set [find comment="AllWorkRoute"] gateway=192.168
.11.1,192.168.30.1;
[admin@UtitradeU] > /ip route set [find comment="AllWorkRoute"] gateway=$FirstI
fInetGW,$ThirdIfInetGW;
expected end of command (line 1 column 67)
------------------
Ругается на "," перед $ThirdIfInetGW
Пришлось городить через конкатенацию:

:local tmpgw;
:set tmpgw ($FirstIfInetGW .",". $ThirdIfInetGW );
/ip route set [find comment="AllWorkRoute"] gateway=$tmpgw;

Так заработало.
Роутер RB951Ui-2HnD ROS 6.20

P.S. Вообще язык скриптов простой и логичный, но запутанный, запутался где ставят [] а где (), и почему не всегда перед if ставят :if, и почему не обязательно в конце оператора ставить ";"
vqd
Модератор
Сообщения: 3760
Зарегистрирован: 26 сен 2013, 14:20
Откуда: НСК
Контактная информация:

Re: Пара полезный приемов при написании скрипта

Сообщение vqd » 14 ноя 2014, 07:48

:set tmpgw ($FirstIfInetGW .",". $ThirdIfInetGW );


что есть логично
Есть интересная задача и бюджет? http://mikrotik.site
leon_serv
Сообщения: 2
Зарегистрирован: 29 окт 2014, 22:32

Re: Пара полезный приемов при написании скрипта

Сообщение leon_serv » 19 ноя 2014, 22:27

Вопрос - а куда выводит :put "Hello!";
RB951Ui-2HnD с прошивкой 6.20
В терминале выводит в терминал, в скрипте :put выводит в "никуда", приходится использовать /log
vqd
Модератор
Сообщения: 3760
Зарегистрирован: 26 сен 2013, 14:20
Откуда: НСК
Контактная информация:

Re: Пара полезный приемов при написании скрипта

Сообщение vqd » 28 ноя 2014, 20:27

:-) кто в теме тот поймет глубину замысла

{
:local tmp "str"
[:parse ":global $tmp"]
}
Есть интересная задача и бюджет? http://mikrotik.site
23q
Сообщения: 57
Зарегистрирован: 16 май 2013, 11:21

Re: Пара полезный приемов при написании скрипта

Сообщение 23q » 19 апр 2015, 16:54

Вообще язык скриптов простой и логичный, но запутанный, запутался где ставят [] а где (), и почему не всегда перед if ставят :if, и почему не обязательно в конце оператора ставить ";"

":" — для глобальных комманд, с символа "/" начинается командная строка, которая будет выполняться относительно корня конфигурации, префикс может отсутствовать, тогда командная строка выполняется относительно текущего раздела конфигурации
23q
Сообщения: 57
Зарегистрирован: 16 май 2013, 11:21

Re: Пара полезный приемов при написании скрипта

Сообщение 23q » 23 апр 2015, 20:56

а как мне глобально переменной присвоить значение:

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

WshShell.SendKeys "{ENTER}"
WScript.Sleep 500
WshShell.SendKeys "reboot"
WshShell.SendKeys "{ENTER}"
WScript.Sleep 2000
WshShell.SendKeys "exit"

???
я присвоил методом считывания в переменную с файла, а как через терминал?
global 1 WshShell.SendKeys "{ENTER}" WScript.Sleep 500 WshShell.SendKeys "reboot" WshShell.SendKeys "{ENTER}" WScript.Sleep 2000 WshShell.SendKeys "exit"
не работает потому-как символы " мешают!
podarok66
Модератор
Сообщения: 3184
Зарегистрирован: 11 фев 2012, 18:49
Откуда: МО

Re: Пара полезный приемов при написании скрипта

Сообщение podarok66 » 23 апр 2015, 21:27

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

:global 1 "WshShell.SendKeys \"{ENTER}\" WScript.Sleep 500 WshShell.SendKeys \"reboot\" WshShell.SendKeys \"{ENTER}\" WScript.Sleep 2000 WshShell.SendKeys \"exit\""

или

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

:global 1 "WshShell.SendKeys \"{ENTER}\" \r\nWScript.Sleep 500 \r\nWshShell.SendKeys \"reboot\" \r\nWshShell.SendKeys \"{ENTER}\" \r\nWScript.Sleep 2000 \r\nWshShell.SendKeys \"exit\""

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

Re: Пара полезный приемов при написании скрипта

Сообщение 23q » 24 апр 2015, 17:11

спасибо!
Реально

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

\"   Insert double quote
\\   Insert backslash
\n   Insert newline
\r   Insert carriage return
\t   Insert horizontal tab
\$   Output $ character. Otherwise $ is used to link variable.
\?   Output ? character. Otherwise ? is used to print "help" in console.
\_    - space
\a    - BEL (0x07)
\b    - backspace (0x08)
\f    - form feed (0xFF)
\v   Insert vertical tab
\xx   Print character from hex value. Hex number should use capital letters.

Вернуться в «Готовые скрипты Mikrotik»

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 1 гость