scripting on routerboard

20
Scripting on RouterBOARD RouterBoard勉強会 Vol.4 @yousuke_saki

Upload: yousuke-saki

Post on 05-Jul-2015

862 views

Category:

Software


8 download

TRANSCRIPT

Page 1: Scripting on RouterBOARD

Scripting onRouterBOARDRouterBoard勉強会 Vol.4

@yousuke_saki

Page 2: Scripting on RouterBOARD

:put "Hello, world."

Page 3: Scripting on RouterBOARD

:put "Hello, world."

「:put」は画面に文字を出力するコマンド

Global commands は「:」ではじまるhttp://wiki.mikrotik.com/wiki/Manual:Scripting#Global_commands

文字列は " " で囲む

コマンドはコンソールに直接入力できる

Page 4: Scripting on RouterBOARD

変数で Hello, world.

:global hello:set hello "Hello,"{ :local world "world." :put ($hello . " " . $world)}

変数の宣言は「:global」または「:local」

「:set」コマンドで変数に値を代入する

スコープは { } で、式は ( ) で囲む

Page 5: Scripting on RouterBOARD

変数で Hello, world.

Page 6: Scripting on RouterBOARD

いろいろ表示してみる

インターフェイスを表示してみると…?

:put [/interface get 0]

MACアドレスだけ表示するには…?

:put [/interface get 0 mac-address]

戻り値の型はどうなっているの…?

:put [:typeof [/interface get 0]]

引数に渡すコマンドは [ ] で囲む

Page 7: Scripting on RouterBOARD

get

「get」は、idや番号で指定した

一つのアイテムの情報を取得するコマンド

階層によって少しだけ書式が違う

/interface get 0

/interface get 0 name

⇒idの指定が必要

/system clock get time

⇒idの指定がない

Page 8: Scripting on RouterBOARD

/system scheduler

起動時または時刻を指定

実行を繰り返す間隔を指定

ここにスクリプトを書く

必要なポリシーをチェック

Page 9: Scripting on RouterBOARD

/system scheduler

例:PPPoE接続が切れた時に、

できる限り早く再接続するスクリプト

/interface pppoe-client:if (true != [get 0 running]) do={ set 0}

Start Time = startup

Interval = 再接続処理を実行する間隔

Policy = read, write, test, policy

Page 10: Scripting on RouterBOARD

分岐と繰り返し

:if (...) do={...}

:for ... from=... to=... do={...}

:foreach ... in=... do={...}

:while (...) do={}

:do {...} while=(...)

Page 11: Scripting on RouterBOARD

分岐と繰り返し

例:CPUの負荷が10%未満の時だけ…

/system resource:if (10 > [get cpu-load]) do={...}

例:1から10を表示する

:for i from=1 to=10 do={ :put $i}

Page 12: Scripting on RouterBOARD

分岐と繰り返し

例:インターフェース名一覧表示

/interface:foreach item in=[find] do={ :put [get $item name]}

[find] を [find running] にすると

動作中のインターフェースが一覧表示される

Page 13: Scripting on RouterBOARD

find

「find」はアイテムを検索するコマンド

単純に find とすると全てのアイテムが

配列で返される(例:/interface find)

単純な一致で検索できる

(例:/inferface find name="ether1")

正規表現で検索することもできる

(例:/inferface find name~"ether")

Page 14: Scripting on RouterBOARD

findと配列とset

「find」コマンドの戻り値は配列

「set」コマンドはアイテムの指定に

配列が使えるので、foreachしなくても…

/interfaceset [find running] comment="!"

set + find で一括編集できる

Page 15: Scripting on RouterBOARD

よく使われるコマンド

:beep ビープ音を鳴らす

:find 文字列検索

:pick 文字列の切り出し

:resolve ホスト名をIPアドレスに

/tool fetch HTTPとかFTPでダウンロード

/tool e-mail メール送信

Page 16: Scripting on RouterBOARD

スクリプトの例

Scripts - MikroTik Wikihttp://wiki.mikrotik.com/wiki/Scripts

Scripting examples - MikroTik Wikihttp://wiki.mikrotik.com/wiki/Manual:Scripting-examples

インターネット接続設定スクリプトhttp://routerboard.jp/support/Internet.html

Page 17: Scripting on RouterBOARD

ばっどのうはう?

宣言直後の変数は型が nothing ですが、この仕様は突然変更された経緯があるので信用しないほうがいいかもしれません

findによる検索が機能せず、アイテムが全部返ってくるというバグがつい半年前にリリースされていました

exportコマンドで出力されるスクリプトは順番に問題があって実行できないことが珍しくないので信用してはいけません

Page 18: Scripting on RouterBOARD

Wikiの情報は

“まぁまぁ正しい”

( 空気を読むんだ! )

Page 19: Scripting on RouterBOARD

よくわからない時は

「 デバッグ = :put 」

Page 20: Scripting on RouterBOARD

説明は以上です

Let's scripting!