###前提・実現したいこと
Cisco機器のログ取りおよび設定変更といったオペレーション自動化にあたり、Teratermマクロを使用しています。
ログ取りや設定変更にあたり、下記のような流れで実行しますが、2の部分をユーザ作成の変数と正規表現を組み合わせた処理をしたいです。
- コマンドを投入
- 「hostname#」といったプロンプトを待つ
- 次のコマンドを投入(以下繰り返し)
Cisco機器の場合、ホスト名を「hostname」とすると様々なプロンプトが存在します。
※実際のホスト名は任意の文字列となりますが、それの取得/ユーザ作成の変数への格納は出来ています。
●プロンプトの例
hostname>
hostname#
hostname(config)#
hostname(config-line)#
hostname(config-if)#
hostname(config-ext-nacl)#
hostname(config-vlan)#
hostname(vlan)#
現在は、上記のプロンプトごとに個別の変数を作って処理しています。
※末尾参照。
###ホスト名取得のソースコード
以下でホスト名(例としてhostname)を「HOST_NAME」というユーザ作成の変数に格納しています。
- NW機器の特権モードで実行しているため「ter len 0」の実施後は必ず「hostname#」というプロンプトが出力されます。
- それをwaiteregexという正規表現のシステム変数で待ちます。
- 正規表現に合致するパターンである「hostname#」がmatchstrに格納され、それにHOSTNAMEに格納します。
- HOSTNAMEの値を#で分割して、残りの部分の「hostname」がgroupmatchstr1に格納されます。
- groupmatchstr1の値(=hostname)がHOST_NAMEに格納されます。
teraterm
1sendln 'ter len 0' 2mpause 500 3waitregex '(.+)\#' 4 5HOSTNAME = matchstr 6strsplit HOSTNAME '#' 7HOST_NAME = groupmatchstr1
###実現したいこと
ホスト名が「hostname」で固定の場合は下記の正規表現で様々なプロンプトに対応できます。
できる!Tera Termマクロより
^hostname(¥(([a-z]+(-.+)?)?¥))?[>#]$
しかし、実際はホスト名が可変のため、作成した「HOST_NAME」という変数と正規表現を組み合わせたいです。
「HOST_NAME」 + (¥(([a-z]+(-.+)?)?¥))?[>#]$
上記を組み合わせる処理がうまくいかず、質問させていただきました。
###補足情報
変更にしているサイト
MACRO Help Index - TeraTerm
###参考)プロンプトごとのソースコードの一部
現在は下記のように、WAIT_HOST_NAMEに各プロンプトをstrconcatで結合して
個別に変数を作成しています。
WAIT_HOST_NAME = HOST_NAME strconcat WAIT_HOST_NAME '#' WAIT_HOST_NAME_CONFIG = HOST_NAME strconcat WAIT_HOST_NAME_CONFIG '(config)#' WAIT_HOST_NAME_CONFIG_IF = HOST_NAME strconcat WAIT_HOST_NAME_CONFIG_IF '(config-if)#'
###参考)コマンド投入部分のソースコード
別途取得するコマンドをCOMMANDに格納して、それを投入後、プロンプトを待つという動作を繰り返しています。このwait部分にユーザ作成の変数と正規表現(waitregex)を組み合わせたwait処理をしたいです。
while result = 0 sendln COMMAND wait WAIT_HOST_NAME WAIT_HOST_NAME_CONFIG WAIT_HOST_NAME_CONFIG_IF WAIT_HOST_NAME_CONFIG_NACL WAIT_HOST_NAME_CONFIG_PMAP WAIT_HOST_NAME_CONFIG_PMAP_C WAIT_HOST_NAME_CONFIG_CMAP filereadln COMHANDLE COMMAND endwhile

回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2018/01/21 11:10
2018/01/24 04:45 編集