【TTL】はじめてのTTLマクロ 3 TTLマクロでサブルーチンを使用
はじめに
サーブルーチンを自作関数のように使用します。再帰的な利用があるわけではないですが、処理の流れやコード内の処理のブロックをわかりやすくするため、サブルーチンを使用しました。
サブルーチンはcallでラベル名を指定して呼び出し、returnで戻ってきます。
returnの後はcall [ラベル名]の次の行から処理が始まるのでendを入れておかないとサブルーチンの処理が再実行されてしまうので注意が必要です。
call [ラベル名]
end ;マクロ終了
:[ラベル名]
ここにサブルーチンの処理を書く
return
logget.ttl
下記のようにコードを修正しました。
文字が小さいとわかりにくいですが、コロン(:)はラベル、セミコロン(;)はコメントアウトです。
;------------------------------------------------------------------------------
;メインルーチン
;------------------------------------------------------------------------------
:mainRoutin
call funcGetConnectText
call funcConnectDevice
call funcLogin
call funcMakeLogFile
call funcExecCommands
sendln "exit"
:labelClose
end ; マクロ終了
;------------------------------------------------------------------------------
;connectするための文字列を作成するサブルーチン
;------------------------------------------------------------------------------
:funcGetConnectText
strTemp = '192.168.11.111:22 /ssh /2 /nosecuritywarning /auth=password /user=ruser /passwd=rpass'
return
;------------------------------------------------------------------------------
;connectするサブルーチン
;------------------------------------------------------------------------------
:funcConnectDevice
;リンク状態を必要に応じてリセットしてから接続
testlink
if result <> 0 closett
connect strTemp
return
;------------------------------------------------------------------------------
;機器にログインするサブルーチン
;------------------------------------------------------------------------------
:funcLogin
wait ">"
flushrecv
sendln "enable"
wait "Password:"
flushrecv
sendln "epass"
return
;----------------------------------------------------------------------------
;ログファイルを作成するサブルーチン
;----------------------------------------------------------------------------
:funcMakeLogFile
logopen 'C:\work\logget\teraterm.log' 1 1
return
;----------------------------------------------------------------------------
;コマンドの実行をするサブルーチン
;----------------------------------------------------------------------------
:funcExecCommands
;ログ取得前の処理
flushrecv
sendln 'terminal length 0'
wait '#'
flushrecv
sendln 'terminal width 0'
wait '#'
flushrecv
sendln 'terminal no monitor'
wait '#'
;ログ取得前の処理
flushrecv
sendln "show ver"
return