scripting on routerboard
TRANSCRIPT
Scripting onRouterBOARDRouterBoard勉強会 Vol.4
@yousuke_saki
:put "Hello, world."
:put "Hello, world."
「:put」は画面に文字を出力するコマンド
Global commands は「:」ではじまるhttp://wiki.mikrotik.com/wiki/Manual:Scripting#Global_commands
文字列は " " で囲む
コマンドはコンソールに直接入力できる
変数で Hello, world.
:global hello:set hello "Hello,"{ :local world "world." :put ($hello . " " . $world)}
変数の宣言は「:global」または「:local」
「:set」コマンドで変数に値を代入する
スコープは { } で、式は ( ) で囲む
変数で Hello, world.
いろいろ表示してみる
インターフェイスを表示してみると…?
:put [/interface get 0]
MACアドレスだけ表示するには…?
:put [/interface get 0 mac-address]
戻り値の型はどうなっているの…?
:put [:typeof [/interface get 0]]
引数に渡すコマンドは [ ] で囲む
get
「get」は、idや番号で指定した
一つのアイテムの情報を取得するコマンド
階層によって少しだけ書式が違う
/interface get 0
/interface get 0 name
⇒idの指定が必要
/system clock get time
⇒idの指定がない
/system scheduler
起動時または時刻を指定
実行を繰り返す間隔を指定
ここにスクリプトを書く
必要なポリシーをチェック
/system scheduler
例:PPPoE接続が切れた時に、
できる限り早く再接続するスクリプト
/interface pppoe-client:if (true != [get 0 running]) do={ set 0}
Start Time = startup
Interval = 再接続処理を実行する間隔
Policy = read, write, test, policy
分岐と繰り返し
:if (...) do={...}
:for ... from=... to=... do={...}
:foreach ... in=... do={...}
:while (...) do={}
:do {...} while=(...)
分岐と繰り返し
例:CPUの負荷が10%未満の時だけ…
/system resource:if (10 > [get cpu-load]) do={...}
例:1から10を表示する
:for i from=1 to=10 do={ :put $i}
分岐と繰り返し
例:インターフェース名一覧表示
/interface:foreach item in=[find] do={ :put [get $item name]}
[find] を [find running] にすると
動作中のインターフェースが一覧表示される
find
「find」はアイテムを検索するコマンド
単純に find とすると全てのアイテムが
配列で返される(例:/interface find)
単純な一致で検索できる
(例:/inferface find name="ether1")
正規表現で検索することもできる
(例:/inferface find name~"ether")
findと配列とset
「find」コマンドの戻り値は配列
「set」コマンドはアイテムの指定に
配列が使えるので、foreachしなくても…
/interfaceset [find running] comment="!"
set + find で一括編集できる
よく使われるコマンド
:beep ビープ音を鳴らす
:find 文字列検索
:pick 文字列の切り出し
:resolve ホスト名をIPアドレスに
/tool fetch HTTPとかFTPでダウンロード
/tool e-mail メール送信
スクリプトの例
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
ばっどのうはう?
宣言直後の変数は型が nothing ですが、この仕様は突然変更された経緯があるので信用しないほうがいいかもしれません
findによる検索が機能せず、アイテムが全部返ってくるというバグがつい半年前にリリースされていました
exportコマンドで出力されるスクリプトは順番に問題があって実行できないことが珍しくないので信用してはいけません
Wikiの情報は
“まぁまぁ正しい”
( 空気を読むんだ! )
よくわからない時は
「 デバッグ = :put 」
説明は以上です
Let's scripting!