Страница 1 из 3
Пара полезный приемов при написании скрипта
Добавлено: 10 мар 2014, 21:15
vqd
В общем сидел весь вечер бился над скриптом который по ДНС именам генерирует белый список сайтов (контент не катит ибо много и юзеров много)
И вот когда писал наступил на пару грабель и обратился к документации где вычитал пару полезный приемов
1. Обработка ошибок
Допустим вы резолвите имя домена которого не существует либо у конторы НС сервера лежат, в общем ваш скрипт вылетит с ошибкой и выполнение остановится.
Лечится вот такой штукой
Код: Выделить всё
:do {
:resolve domena.net
} on-error={
/log warning ("Error")
}
2. неоднократно при написании больших скриптов не хватало мне функций. При очень больших проектах пользовался пародией на процедуры вызывая дополнительные скрипты, но не тут то было, оказывается и тут есть решение
Код: Выделить всё
[admin@MikroTik] > :global fun do={:put "YES!!!"}
[admin@MikroTik] > $fun
YES!!!
Re: Пара полезный приемов при написании скрипта
Добавлено: 12 авг 2014, 14:29
23q
вопрос
:
если сделать
ответ:
93.158.134.3
если сделать:
Код: Выделить всё
global 1 [:do {
:resolve ya.ru
} on-error={
/log warning ("Error")
}]
ответ:
;93.158.134.3
пришлось делать вот такую конструкцию:
Код: Выделить всё
global 1 [:pick [:do {
:resolve ya.ru
} on-error={
/log warning ("Error")
}] 1]
ответ: 93.158.134.3
так и надо, или я туплю?
Re: Пара полезный приемов при написании скрипта
Добавлено: 12 авг 2014, 17:24
podarok66
А цель-то какая? Что Вы хотели увидеть? А то как-то непонятненько, что окромя адреса Вы хотели получить из резолва.
Re: Пара полезный приемов при написании скрипта
Добавлено: 12 авг 2014, 17:48
vqd
Человек имеет в виду что непонятно откуда берется ";"
Re: Пара полезный приемов при написании скрипта
Добавлено: 12 авг 2014, 18:52
podarok66
А-а-а-а, я думал очепятка. Домой приду, попробую...
Re: Пара полезный приемов при написании скрипта
Добавлено: 12 авг 2014, 23:06
podarok66
Да, действительно, странновато выводит.
И вот что еще, делаю резолв адреса, получаю результат. Отключаю интерфейс, связывающий микротик с внешним миром. Делаю резолв опять. Получаю результат!!! Результат сохраняется в кэше. Если пытаюсь получить результат на другой адрес, получаю :
Re: Пара полезный приемов при написании скрипта
Добавлено: 13 авг 2014, 01:29
23q
podarok66 писал(а):Отключаю интерфейс, связывающий микротик с внешним миром. Делаю резолв опять. Получаю результат!!! Результат сохраняется в кэше.
Это норма! Очистишь кеш - ничего не получишь!
А вот еще:
после
Код: Выделить всё
global 1 [:pick [:do {
:resolve ya.ru
} on-error={
/log warning ("Error")
}] 1]
если днс не резольвится мы получаем пустую переменную 1.
Потом, если выполнить
:global PingResult01 [/ping $1 count=3]
угадайте какой ответ мы получим?
3!
:global PingResult01 [/ping $1 count=3]
HOST SIZE TTL TIME STATUS
no address was specified
no address was specified
no address was specified
sent=3 received=3 packet-loss=0% min-rtt=0ms avg-rtt=0ms max-rtt=0ms
И еще, может кто знает как выполнить проверку на пустую переменную?
Офф форум говорит:
Код: Выделить всё
:global aaa;
:if (:typeof[$aaa] = "nil") do={
...
}
но не работает!
хотя можно пользоваться и
Re: Пара полезный приемов при написании скрипта
Добавлено: 13 авг 2014, 07:08
vqd
Вообще на пустую?
Я обычно тупо :if ($p="") do={}
nil совсем недавно появился. Чуть ли не в последней прошивке вроде
Re: Пара полезный приемов при написании скрипта
Добавлено: 13 авг 2014, 10:16
23q
vqd писал(а):Вообще на пустую?
Я обычно тупо :if ($p="") do={}
nil совсем недавно появился. Чуть ли не в последней прошивке вроде
лично у меня, на 6.18, такой прием не работает:
Re: Пара полезный приемов при написании скрипта
Добавлено: 21 авг 2014, 18:17
23q
по первым двум траблам, передана программистам, по третьей привожу дословный ответ:
Код: Выделить всё
> > Работает:
> > {
> > local aaa
> > if condition=([/typeof $aaa] = "nothing") do={:put nothing} else={:put
> > something}
> > set $aaa "value"
> > if condition=([/typeof $aaa] = "nothing") do={:put nothing} else={:put
> > something}
> > }
> >
> > Неработает:
> > local aaa
> > if condition=([/typeof $aaa] = "nothing") do={:put nothing} else={:put
> > something}
> > set $aaa "value"
> > if condition=([/typeof $aaa] = "nothing") do={:put nothing} else={:put
> > something}