TTL脚本介绍及使用

@[toc]

1.tera term超级终端

​ 一款Window上的虚拟终端工具,它同时支持串口连接和网络连接,而对于网络连接它支持Telnet和SSH协议。最关键的是Tera Term支持自己的脚本语言,即TTL(Tera Term Language)。该语言语法丰富而且简单易学,同时Tera Term 支持命令行操作,两者结合起来可以满足各种自动化方面的需求。

2.TTL基本命令

  • Pause:暂停
    • pause
  • Sendln:发送命令并换行
  • Send:发送命令
  • wait:等待字符串出现

3.TTL语法格式

注释:
; 分号开始的行是注释行
var = 0  ; 这里分号右边开开始也算注释
字面量:
; 支持正数负数, 不支持浮点数
123
-11

; $开始的数字是16进制
$3a
$10F

; 字符串
'Hello, world'
"I can't do that"
"汉字也支持"

; #开头的是ASCII码值字符, 也就是#后的数字查ASCII码表对应的是哪个字符就是哪个字符
#65  ; 文字 "A"
#$41  ; 文字 "A"
#13  ; CR 文字

; 字符串可以直接拼接
'cat readme.txt'#13#10  ; 相当于 "cat readme.txt\r\n"
'abc'#$0d#$0a'def'#$0d#$0a'ghi'
变量:

变量包括用户自定义变量系统变量两部分.

下面将分别介绍一下.

自定义变量:

定义变量无需指定类型, 直接使用 变量名 = 值 的语法即可.

; 定义普通变量
_var = 'valid'  ; 下划线开始的变量名合法
var_1 = 1  ; 这是一个数字
var_2 = 'str'  ; 这是一个字符串

; 定义数组及赋值
intdim a 3  ; int数组
a[0] = 1
a[1] = 2
a[2] = 3

strdim s 3  ; str数组
s[0] = '1'
s[1] = '2'
s[2] = '3'
系统变量:

TTL 预置使用了一些系统变量, 写脚本的时候注意不要占用. 阅读脚本的时候要注意这些是系统变量, 是作为系统函数返回值而存在的.

常见的有 inputstr, matchstr, param1 ... param9, params, result, timeout 等.

具体请查看 Tera Term 的帮助文件.

inputstr  ; waitln等函数的接收到的值存放于此
matchstr  ; strmatch等函数的值存放于此
param1  ; 调用脚本时候传入的第一个参数
params  ; 调用脚本时候传入的所有参数的数组
result  ; waitln等函数执行的结果code存放于此
timeout  ; 超时时间
流程控制:

TTL 也支持基本的流程控制操作.

do, loop
; 循环10次
i = 10
do while i > 0
  i = i - 1
loop
while, endwhile
; 循环10次
i = 10
while i > 0
  i = i - 1
endwhile
until, enduntil
; 循环10次
i = 1
until i > 10
  i = i + 1
enduntil
for, next
; 循环10次
for i 1 10
  sendln 'abc'
next

; 循环5次
for i 5 1
  sendln 'abc'
next
if, then, elseif, else, endif
if a = 1 then
  b = 1
  c = 2
  d = 3
endif

if i < 0 then
  i = 0
else
  i = i + 1
endif

if i = 1 then
  c = '1'
elseif i = 2 then
  c = '2'
elseif i = 3 then
  c = '3'
else
  c = '?'
endif
break, continue
; break
while 1
  recvln
  strcompare inputstr "OK"
  if result = 0 then
    break
  else
    sendln "abc..."
  endif
endwhile

; continue
a = 0
b = 0
while a < 5 
  a = a + 1
  if a > 2 then
    continue
  endif
  b = b + 1
endwhile

sprintf2 var "a=%d b=%d" a b
dispstr var
; a=5 b=2
子过程

TTL 可以定义一些子过程, 方便重复调用. 但是没有返回值, 不能称之为函数.

定义子过程首先要了解 label 标签

; 冒号开始的是标签
: I_am_a_label  ; 这就是一个标签

可以这样定义和调用子过程:

messagebox "I'm in main." "test"
; 跳转到":sub"
call sub
  messagebox "Now I'm in main" "test"
end

; 子过程具体定义
:sub
  messagebox "Now I'm in sub" "test"
  return  ; 返回到主体

4.实例

4.1 ssh登陆实例
; login infomation
HOSTNAME = '192.168.109.129'
USERNAME = 'root'
PASSWORD = '123456'

; login command
sprintf2 server '%s:22 /ssh  /auth=password /user=%s /passwd=%s' HOSTNAME USERNAME PASSWORD
connect server


wait '$' '#'
; 
sendln "echo hello TTL"
4.2 使用tcpdump抓包并且备份
; A login sample by zhanglintc

; no timeout for keyword 'wait'

; login infomation
HOSTNAME = '192.168.109.129'
USERNAME = 'root'
PASSWORD = '123456'

; login command
sprintf2 server '%s:22 /ssh  /auth=password /user=%s /passwd=%s' HOSTNAME USERNAME PASSWORD
connect server


wait '$' '#'
; 抓包
sendln "tcpdump -i ens33 port 8080 -w /root/package-content/jeesite/test3.cap"

wait '$' '#'
; 转移数据包
sendln "mv -f -b -v /root/package-content/jeesite/test3.cap /root/package-content/jeesitebak/"
; 退出终端
sendln "exit"

Q.E.D.