マクロは陰で使うもの。生産性を上げても給料は上がらず仕事が増えるだけなので仕事をサボろう!

Tera Term マクロの変数と文字列操作について説明します【基礎知識】

Tera Term マクロにおける変数と文字列操作

Tera Term マクロを作成する際、接続先機器に合わせて以下のような様々なパラメータを指定します。

  • IP アドレス
  • ユーザ名、パスワード
  • 実行コマンド
  • プロンプト情報

これらの値は直接マクロコマンドの引数として指定することもできますが、この方法だとマクロ編集が大変になります。特に同じ値が複数個所で使われている場合、その数分だけ手動で修正する必要があります。

このような場合「変数」を使用することで編集が楽なマクロ設計にすることができます。変数はマクロを構成する基本的な要素のため、ここで覚えていって下さい。

また、Tera Term マクロでは wait コマンドやログファイル名指定などで文字列を良く扱います。文字列の作成に役立つ関数についてもここで説明します。

動作確認環境

  • Tera Term Version 4.104

変数の使い方

まず変数について説明します。

変数とは

変数とは、値を格納することができる名前付きの箱です。

変数には以下の性質があります。

  • 変数の名前は以下の規則に従って任意に付けることができます
    • アルファベット、数字、アンダーバー「_」を使用可能
    • 名前の先頭を数字にすることはできない
    • 予約されている単語(組み込みの関数名など)と同じ名前は使えない
  • 一つの変数には一つの値を格納することができます
  • コマンドの値を指定する箇所で変数の名前を指定すると、変数の中に格納されている値を指定したことと同じ意味になります
  • 変数の値は途中で変更することができます

変数への値の格納方法と使用例

変数への値の格納は以下の形式で記載します。

変数への値の格納
  • 格納する値が文字列以外の場合(数値など)
    • <変数名> = <値>
  • 格納する値が文字列の場合、「"」または「'」で文字列を囲う必要がある
    • <変数名> = "<値(文字列)>"
    • または
    • <変数名> = '<値(文字列)>'

例えば、「ipaddress」という名前の変数に、「192.168.10.20」という文字列を格納する場合以下のように記述します。

ipaddress = "192.168.10.20"

メッセージを表示する関数 messagebox を使用して変数の使用例を示します。

以下は変数を使用していないマクロです。

messagebox "メッセージ" "タイトル"

このマクロを実行すると以下のようなメッセージが表示されます。

ここで、messagebox のメッセージとタイトルを変数を使用して指定してみます。以下のようにメッセージ用の変数とタイトル用の変数を用意して値を格納し、messagebox では変数を使用して値を指定します。

msg = "メッセージ"
title = "タイトル"
messagebox msg title

このマクロを実行すると、上で記載の変数を使用していないマクロと同じ内容のメッセージが表示されます。

変数の値の変更

一度値を格納した変数について、別の値を格納し直したい場合があります。その場合は、再度値を格納する構文を記述すればOKです。

msg = "メッセージ"
title = "タイトル"
messagebox msg title

msg = "新しいメッセージ"
messagebox msg title

上のマクロでは変数 msg に対して「メッセージ」を格納してメッセージを表示し、その後「新しいメッセージ」を格納し直して再度メッセージを表示しています。これを実行すると、以下のように1回目のメッセージと2回目のメッセージでメッセージ内容が変わっていることが分かります。つまり変数 msg の内容が変わっていると言えます。

変数の「型」を理解しよう

変数には「」という概念があります。型とはその変数が格納できる値のタイプを示します。

Tera Term マクロで使える型は以下の通りです。

意味値の例
整数型整数値を格納できる0、10、100、-1、-10、-100
文字列型文字列を格納できる'mojiretsu'、'hogepiyo'
整数配列型整数値を格納できる配列
文字列配列型文字列を格納できる配列

変数の型は、最初に値を格納した時点で決まります。整数を格納した変数は整数型の変数となり、文字列を格納した変数は文字列型の変数になります。変数の型が決まると、その変数には決まった型の値しか格納できなくなります。

Tera Term マクロでは小数値を格納できる型が存在しないため、変数で小数を扱うことはできません。

配列型の変数については値を格納する前に定義する必要がありますが、定義のコマンドが整数型と文字列型で異なるため、配列を定義したタイミングで型が決まります。

  • intdim → 整数配列型を定義するコマンド
  • strdim → 文字列配列を定義するコマンド

配列について詳しくは別の記事で説明します。

文字列の操作

次に、良く使う文字列の操作方法について説明します。

文字列の連結【strconcat】

最もよく使う文字列操作は文字列の連結です。

以下の文字列を格納した変数 msg があるとします。

msg = "Tera Term マクロを使って"

この変数 msg の末尾に文字列を追加したい場合、strconcat という関数を使用します。 strconcat は以下の形式で使用します。

strconcat の使用方法
  • strconcat <変数名> "<追加文字列>"
    • <変数名>:文字列を連結する対象の変数
    • "<追加文字列>":直接文字列を指定する代わりに、文字列を格納した変数でも可

以下使用例です。

msg = "Tera Term マクロを使って"
strconcat msg "仕事をサボろう"

title = "タイトル"
messagebox msg title

このマクロを実行すると以下のメッセージ内容が表示されます。変数 msg に文字列が連結されていることが分かります。

strconcat では複数の文字列の連結はできない

strconcat では、連結する文字列は一つしか指定できません。例えば以下のように3つの変数 string1string2string3 があり、string1string2string3 を連続して末尾に連結したいとします。

string1 = "string1の文字列"
string2 = "string2の文字列"
string3 = "string3の文字列"

strconcat を使って文字列の連結をする場合、以下のように2回 strconcat を使う必要があります。

strconcat string1 string2
strconcat string1 string3

2回程度ならまだ良いですが、もっと連結したい文字列が多い場合は strconcat よりも次に説明する sprintf2 を使用することをお勧めします。

変数を含む文字列の作成【sprintf2】

2つ目の文字列操作関数として sprintf2 を説明します。

sprintf2 では、変数を含む文字列を作成して変数に格納することができます。その使用方法は以下の通りです。

sprintf2 の使用方法
  • sprintf2 <格納先変数名> "<作成文字列>" <挿入変数名1> <挿入変数名2> ...
    • <格納先変数名>:作成された文字列を格納する変数
    • "<作成文字列>":作成される文字列。
      • 文字列型変数の値を挿入する箇所には「%s」と記述
      • 整数型変数の値を挿入する箇所には「%d」と記述
    • <挿入変数名1> <挿入変数名2> ...:「作成文字列」の中の変数部分に入れ込む変数を必要数だけ半角スペース区切りで指定

以下使用例です。このマクロでは「hostname」と「ipaddress」という変数を使用して sprintf2 で文字列を作成し、その結果を変数 msg に格納し、messagebox のメッセージとして使用しています。

hostname = "MyRouter"
ipaddress = "10.20.30.40"

sprintf2 msg "%sのアドレスは%sです" hostname ipaddress

title = "タイトル"
messagebox msg title

sprint2 の結果として変数 msg には「MyRouterのアドレスは10.20.30.40です」という文字列が格納されます。

sprintf2strconcat よりもやや複雑ですが、使い勝手が良いので当サイトでは sprintf2 を使用することをお勧めします。

【マクロ例】connect コマンドの引数を変数で指定する

connect コマンドで SSH 接続する場合を考えます。この場合、IP アドレス、ユーザ名、パスワードを指定する必要があります。

以下は変数を使用していないマクロです。

connect “10.1.1.1:22 /ssh /2 /auth=password /user=admin /passwd=admin /nosecuritywarning”

以下は各引数を変数を使用して指定する場合のマクロです。sprintf2 を使用して connect コマンドに与える値を変数 concmd に格納した上で、connect コマンドの値として変数 concmd を指定しています。

ipaddress = "10.1.1.1"
username = "admin"
userpass = "admin"

sprintf2 concmd "%s:22 /ssh /2 /auth=password /user=%s /passwd=%s /nosecuritywarning" ipaddress username userpass
connect concmd

上のようにコマンドに与える値を変数化しておけば、マクロの再利用をする際の編集が非常に楽になります。この例だと接続先機器が変わった場合、変数 ipaddressusernameuserpass の値を変えれば良いということになります。

まとめ

CHECK!
  • 変数とは値を格納する名前付きの箱
  • コマンドの引数には値を直接書く代わりに変数を指定することができる
  • 文字列の連結には strconcat、変数を含む文字列の作成には sprintf2 を使用する
  • コマンドに与える値は変数化しておくと再利用時の編集が楽になる

Tera Term マクロ関連記事リスト


Amazon で買えるおすすめアイテム(アフィリエイト)

ブログ始めるなら 【アフィリエイトリンク】

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

コメント

コメントする

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)