5.3.1. 変数を使って、接続先IPも変更する
前回は、ログの保存ディレクトリを変数にするgetdirコマンドについて書きました。
これまでに以下を変数化してマクロを読みやすくしてきました。
・ログ保存ディレクトリ
・パスワード
マクロの中でいじる可能性がある部分といじらない部分が分かれたことによって、随分と読みやすくなってきたのではないでしょうか。
ここまできたら、接続先IPアドレスも変数化したいところですね。
5.3.1.1. IPアドレスを変数化する準備
そこでIPアドレスを変数化するため、connectコマンドの一行を見てみると、
1 |
connect '172.16.0.1:23 /nossh /T=1' |
となっています。
変数名としてIP_ADDRを使うとしましょう。
素直に、
1 |
IP_ADDR = '172.16.0.1:23 /nossh /T=1' |
と書くのは、少し不細工ですね。
さらに言うと、運用上変更があるとすればIPアドレスの部分だけですので、この書き方はちょっとスマートな感じがしません。
やりたいこととしては、
172.16.0.1
の部分だけをなんとかして変数化し、
:23 /nossh /T=1
の部分はそのまま残しておきたいですね。
5.3.1.2. strconcatコマンドを使う
こういった場合に使用されるコマンドが
1 |
strconcat 変数名 継ぎ足す文字列 |
というものです。
strconcatはstringth(文字列)をconcatenateするところから来ています(のはずです)。
つまり文字列をつなぐ、というコマンドです。strconcatコマンドを使えば、変数名に継ぎ足す文字列を継ぎ足した物を、改めて変数に格納することができます。
少しわかりにくいのでもう少し具体的に説明すると、
1 |
STR = '変数' |
という変数宣言があったとします。
1 |
strconcat STR 'つなげる' |
というコマンドを実行すると、STRには
‘変数つなげる’
という文字列が格納されることになります。
5.3.2. マクロの中にstrconcatを書いていく
では実際にIPアドレスに置き換えて書いてみましょう。
5.3.2.1. 実際に変数化していく
変更される可能性のあるIPアドレスを
1 |
IP_ADDR = '172.16.0.1' |
という形で、IP_ADDRに格納します。
その後に繋げたい文字列として
‘:23 /nossh /T=1’
がありますので、コマンドとしては、
1 |
strconcat IP_ADDR ':23 /nossh /T=1' |
のようになります。
このコマンドを実行すると、IP_ADDRには
‘172.16.0.1:23 /nossh /T=1’
が格納されることになります。
5.3.2.2. マクロに取り込む
早速マクロの中に取り込んでみましょう。
前回までに書いたマクロは以下の通りでした。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 |
;================================= ;passwordの変数、月に一回変更する ;================================= PWD = 'cisco123' ;================================= ;telnet接続 ;マクロディレクトリにログ保存 ;================================= connect '172.16.0.1:23 /nossh /T=1' getdir DIR changedir DIR ;================================= ;show runのログを取得 ;================================= logopen 'show_run.log' 0 0 wait 'Password:' sendln PWD wait '>' pause 3 sendln 'en' wait 'Password' pause 3 sendln PWD wait '#' pause 3 sendln 'terminal length 0' wait '#' pause 3 sendln 'show run' pause 5 sendln '' wait '#' logclose ;================================= ;show logのログを取得 ;================================= logopen 'show_log.log' 0 0 sendln 'show log' pause 5 sendln '' wait '#' sendln 'exit' end |
このマクロでPWDと同様に、IP_ADDRを書き換えやすいようにしてみます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 |
;================================= ;変数格納 ;================================= PWD = 'cisco123' IP_ADDR = '172.16.0.1' ;IPアドレスに必要なオプションを追加する strconcat IP_ADDR ':23 /nossh /T=1' ;================================= ;telnet接続、ログ保存ディレクトリ ;================================= connect IP_ADDR getdir DIR changedir DIR ;================================= ;show runのログを取得 ;================================= logopen 'show_run.log' 0 0 wait 'Password:' sendln PWD wait '>' pause 3 sendln 'en' wait 'Password' pause 3 sendln PWD wait '#' pause 3 sendln 'terminal length 0' wait '#' pause 3 sendln 'show run' pause 5 sendln '' wait '#' logclose ;================================= ;show logのログを取得 ;================================= logopen 'show_log.log' 0 0 sendln 'show log' pause 5 sendln '' wait '#' sendln 'exit' end |
5行目で、IP_ADDRにIPアドレスの値を格納しました。
9行目で今回解説したstrconcatのコマンドを書いています。8行目には、簡単にstrconcatしている旨のコメントを記しています。
15行目のconnectが随分すっきりしましたが、これでもマクロは問題なく動作するはずです。
5.3.3. まとめ
今回登場したstrconcatは、Tera Termマクロを書いていると登場頻度の高いコマンドです。注意しなければならないのは、変数の後ろにしか文字列をつなぐことができない、ということです。変数の前には文字列をつなぐことはできません。
Tera Termバージョンの4.67以降で、strinsertというコマンドが追加されたので、変数の前にも文字列を追加することができるようになりました。
しかし、本当に汎用性の高いマクロを作っていく場合は、できる限り端末にインストールされているTera Termのバージョンを気にしないようにする必要があります。そういう意味でも、strconcatの扱いには慣れておいた方がいいと言えるでしょう。
次回は、変数を使って、ファイル名にも一手間加えていきたいと思います。