скриптинг (общее, вопросы 'обо' всем)

Раздел для тех, кто начинает знакомиться с MikroTik
Правила форума
Как правильно оформить вопрос.
Прежде чем начать настройку роутера, представьте, как это работает. Попробуйте почитать статьи об устройстве интернет-сетей. Убедитесь, что всё, что Вы задумали выполнимо вообще и на данном оборудовании в частности.
Не нужно изначально строить Наполеоновских планов. Попробуйте настроить простейшую конфигурацию, а усложнения добавлять в случае успеха постепенно.
Пожалуйста, не игнорируйте правила русского языка. Отсутствие знаков препинания и неграмотность автора топика для многих гуру достаточный повод проигнорировать топик вообще.

1. Назовите технологию подключения (динамический DHCP, L2TP, PPTP или что-то иное)
2. Изучите темку "Действия до настройки роутера".
viewtopic.php?f=15&t=2083
3. Настройте согласно выбранного Вами мануала
4. Дочитайте мануал до конца и без пропусков, в 70% случаев люди просто не до конца читают статью и пропускают важные моменты.
5. Если не получается, в Winbox открываем терминал и вбиваем там /export hide-sensitive. Результат в топик под кат, интимные подробности типа личных IP изменить на другие, пароль забить звездочками.
6. Нарисуйте Вашу сеть, рисунок (схему) сюда. На словах может быть одно, в действительности другое.
-user-
Сообщения: 30
Зарегистрирован: 21 мар 2013, 10:05

Подскажите пожалуйста, где почитать про команды, с которыми можно осуществить парсинг строки...

например:
на выходе этой "команды" /system clock get date получаются данные с знаками "/", а так как задача вставить дату в имя файла, то надо заменить "/", например, на это "."

зачитал до дыр мануал по скриптингу, не пойму, что от туда, мне нужно применить.... :-(




upd: нашел только одну "команду" , которой хоть как-то можно вывернуться - :pick <var> <start>[<end>] Что еще можно использовать?
Последний раз редактировалось -user- 10 сен 2014, 15:28, всего редактировалось 2 раза.


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

{:local filename ([:pick [/system clock get date] 4 6] . "." . [:pick [/system clock get date] 0 3] . "." . [:pick [/system clock get date] 7 11]);
:log info $filename; }
Вот так выглядит конструкция с точками, но учтите, это текстовая строка, а не дата. Для названий использовать можно, а вот далее в скриптинге в таком виде никак. Ну да Вам нужно именно для названия :-)


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

podarok66 писал(а):...
Ага, СПС :a_g_a:

А так вообще, всё, что нашел, чем можно работать со строкой, так только это:

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

:put [:len "length=8"]
:put [:pick "abcde" 1 3]
:put [:find "abc" "a" -1]

хоть и непривычно мало, но, в принципе, уже колдовать можно с разными степенями извращения :-)


Единственно вопрос мучает: количество символов в имени месяца (в дате), во всех случаях три, или бывает из 2 букв или может из 4-х? А то к МТ доступа пока нету, поколдовать с датами и просмотреть... сижу пока на http://demo2.mt.lv/webfig/# в терминале :-) ... а там дату не поменять, естественно, прав нету :ne_ne_ne:


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

Еще могу подсказку дать

Частенько когда писал скрипты то сталкивался с проблемой.
Например в условии надо сравнить ИП адрес
:if (10.0.0.1/24 = 10.0.0.1)

Часто в переменную писался именно адрес с маской и приходилось ее обрезать что бы получить именно ИП для условия.

Но как то раз когда я в очередной раз лазил по документации наткнулся на ~ )))
Теперь условия выглядят так
:if (10.0.0.1/24~ 10.0.0.1) и не надо маску обрезать )))

ПыСы: В микротике есть инструмент для работы с ИП адресами и масками и вышеприведенное просто пример для понимания


Есть интересная задача и бюджет? http://mikrotik.site
-user-
Сообщения: 30
Зарегистрирован: 21 мар 2013, 10:05

vqd писал(а):наткнулся на ~ )))
:if (10.0.0.1/24~ 10.0.0.1) и не надо маску обрезать )))


СПС, учту :a_g_a:


-user-
Сообщения: 30
Зарегистрирован: 21 мар 2013, 10:05

хммм...

немного странно выглядит осуществление:
:pick <var> <start>[<end>]


например:

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

put [:pick "01234" 1 4]  
123

:put [:pick "01234" 0 4]
0123

:put [:pick "01234" 0 5]
01234

учитывая, что символа в "строке" с позицией номер 5 - нету (отсчет начинается с 0 и последний символ в "строке" имеет место 4).., но для того чтобы вывести по последний знак в строке, нужно указать именно до символа с местом 5 :sh_ok: :-): которого просто не существует... Получается для позиции <start> используется одна логика для её определения, а для позиции <end> - другая :ne_vi_del:


-user-
Сообщения: 30
Зарегистрирован: 21 мар 2013, 10:05

что получилось:

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

{
:local BDOvarData
:local BDOvarTime

:local BDOvarNumDivider1
:local BDOvarNumDivider2

:local BDOvarNameFile
:local BDOvarInterimNameFile1
:local BDOvarInterimNameFile2
:local BDOvarLen

:set BDOvarData [/system clock get date]
:set BDOvarTime [/system clock get time]

:set BDOvarNumDivider1 [:find $BDOvarData "/" -1]
:set BDOvarNumDivider2 [:find $BDOvarData "/" $BDOvarNumDivider1]
:set BDOvarLen [len $BDOvarData]

:set BDOvarInterimNameFile1 ([:pick $BDOvarData 0 $BDOvarNumDivider1].".".[:pick $BDOvarData ($BDOvarNumDivider1+1) ($BDOvarNumDivider2)].".".[:pick $BDOvarData ($BDOvarNumDivider2+1) $BDOvarLen])

:set BDOvarInterimNameFile2 ([:pick $BDOvarTime 0 2].".".[:pick $BDOvarTime 3 5].".".[:pick $BDOvarTime 6 8])

:set BDOvarNameFile ($BDOvarInterimNameFile1."_".$BDOvarInterimNameFile2)

:put $BDOvarNameFile
}
sep.01.2014_13.24.40

или одной строкой:

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

[:local BDOvarData] [:local BDOvarTime] [:local BDOvarNumDivider1] [:local BDOvarNumDivider2] [:local BDOvarNameFile] [:local BDOvarInterimNameFile1] [:local BDOvarInterimNameFile2] [:local BDOvarLen] [:set BDOvarData [/system clock get date]] [:set BDOvarTime [/system clock get time]] [:set BDOvarNumDivider1 [:find $BDOvarData "/" -1]] [:set BDOvarNumDivider2 [:find $BDOvarData "/" $BDOvarNumDivider1]] [:set BDOvarLen [len $BDOvarData]] [:set BDOvarInterimNameFile1 ([:pick $BDOvarData 0 $BDOvarNumDivider1].".".[:pick $BDOvarData ($BDOvarNumDivider1+1) ($BDOvarNumDivider2)].".".[:pick $BDOvarData ($BDOvarNumDivider2+1) $BDOvarLen])] [:set BDOvarInterimNameFile2 ([:pick $BDOvarTime 0 2].".".[:pick $BDOvarTime 3 5].".".[:pick $BDOvarTime 6 8])] [:set BDOvarNameFile ($BDOvarInterimNameFile1."_".$BDOvarInterimNameFile2)] [put $BDOvarNameFile]


Всем спасибо за подсказки и наставления :a_g_a:


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

Ну что же, поздравляю. Первый полноценный продукт :-):
Вы бы еще ; использовали на всякий случай. Это поможет, поверьте. Особенно когда станете разбирать код, который писали год назад...


Мануалы изучил и нигде не ошибся? Фаервол отключил? Очереди погасил? Витая пара проверена? ... Тогда Netinstal'ом железку прошей и настрой ее заново. Что, все равно не фурычит? Тогда к нам. Если не подскажем, хоть посочувствуем...
Аватара пользователя
Dragon_Knight
Сообщения: 1724
Зарегистрирован: 26 мар 2012, 18:21
Откуда: МО, Мытищи
Контактная информация:

-user- писал(а):хммм...

немного странно выглядит осуществление:
:pick <var> <start>[<end>]


например:

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

put [:pick "01234" 1 4]  
123

:put [:pick "01234" 0 4]
0123

:put [:pick "01234" 0 5]
01234

учитывая, что символа в "строке" с позицией номер 5 - нету (отсчет начинается с 0 и последний символ в "строке" имеет место 4).., но для того чтобы вывести по последний знак в строке, нужно указать именно до символа с местом 5 :sh_ok: :-): которого просто не существует... Получается для позиции <start> используется одна логика для её определения, а для позиции <end> - другая :ne_vi_del:

Во всех языках программирования первое значение это номер символа, начиная от нуля, второе это кол-во символов, а отсчёт, согласно учебникам первого класса :-), начинается с единицы, так что всё правильно работает)

:put [:pick "01234" 0 5] - Выбрать пять знаков, начиная с элемента массива с индексом '0'.


Небольшой свод правил логики и ссылок:
  1. Если устройство имеет Ethernet порт, то оно обязано быть подключено через него. Компьютер, Ноутбук, Телевизор, Принтер, Камера видеонаблюдения, и т.д.
  2. Если нет возможности протянуть кабель, то найдите её, или страдайте со своими проблемами Wi-Fi дальше.
  3. Wi-Fi это сеть для мобильных устройств. Если Вы подключили свой шикарный 50" телевизор не кабелем, то без фотоотчёта, когда он лежит у Вас в кармане дальнейшего разговора не получиться. Это относится и ко всем остальным устройствам.
  4. Если Ваше устройство вызывает вопросы в работе, первое что необходимо делать: NetInstall + дальнейшая настройка вручную.
  5. Не используйте WebFig или QuickSet - это пути к глюкам и ошибкам. Только SSH или WinBox, и да, - WinBox есть под Android.
  6. name.rsc - это текстовый файл, и Вы можете его открыть блокнотом.
  7. Если Вы хотите связаться со мной для ремонта или настройки, то: Telegram ( Не благотворительность ).
  8. Мой сайт по Mikrotik: Global Zone >> MikroTik.
-user-
Сообщения: 30
Зарегистрирован: 21 мар 2013, 10:05

Dragon_Knight писал(а)::put [:pick "01234" 0 5] - Выбрать пять знаков, начиная с элемента массива с индексом '0'.
:-):
Тоже была такая мысль, но это было бы верно, если бы это:

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

put [:pick "01234" 1 4]  
123
дало бы результатом: 1234, но результат то получается: 123, значит все таки не количество знаков подразумевается, а именно позиция, только немного в другой интерпритации (т.е. до этой позиции - не_включительно).... я не спорю и не переубеждаю.. просто, мне как нубу не привычно видеть такой "вариант" :du_ma_et:


podarok66 писал(а):Ну что же, поздравляю. Первый полноценный продукт :-):
Вы бы еще ; использовали на всякий случай. Это поможет, поверьте. Особенно когда станете разбирать код, который писали год назад...
благодАр :a_g_a: :smu:sche_nie: :-) Просто пока тренируюсь в настройке, приходиться часто делать бэкапы МТ, после каждой удачной настройки, и задолбался вручную набивать имена к бэкапам... хочу сделать, чтобы один тык в скрипт сохранял на флэшку сразу и бэкап и экспорт и экспорт по подразделам отдельно.... ....
Если честно, пока не понимаю, даже для чего ставятся : и ; , в мануале, написано, тоже, "нужно ставить", но с тем же двоеточием и без него работает как и в начале строки, так и в квадратных скобках.... по этому пока вообще не пойму, на что они влияют, буду стараться исправляться :hi_hi_hi:
хотелось бы увидеть пример, в котором без точек или точкиЗапятой, не сработает скрипт... (видать просто сложных еще не видел скриптов, где это может и правда имеет значение :smu:sche_nie: )


Ответить