工作中会用到 TTL 脚本, 主要是在测试的时候使用. 利用 TTL 脚本可以自动登录服务器, 并且自动在服务器上执行编辑好的命令, 并且能把相应的屏幕显示作为 log 信息保存到本地, 基本上来说就是实现了测试自动化, 而且还能较好的保留下来各种信息.

所以感觉这个东西还是挺实用的, 于是决定简单总结一下.


前言

所谓 TTL, 其实是 Tera Term Language 的缩写. 那么 Tera Term(Wiki)又是个什么东西呢? 其实就是个终端(Terminal), 也就是说跟什么 SecureCRT, XSehll, Putty 之类的东西差不多一个意思.

Tera Term 是日本人搞出来的东西. 其实光说这个 Tera Term 我觉得似乎也并不咋好用, 不过关键就在于它有它自己的脚本语言 Tera Term Language 啊. 有了这个语言的支持以后, 它这个终端本身好不好用就不那么重要了, 只要我能利用 TTL 完成一系列的自动化操作就是好东西.

Tera Term 这个东西本身我就不介绍了, 只要到 Tera Term Open Source Project 下载安装就好了. 反正写好的脚本双击以后是会自动调用这个工具的.

那么之后的内容将会主要介绍 TTL 的语法和使用.

使用 TTL

创建一个文本文件, 后缀名为 .TTL, 保存后双击即可运行.

以下是简单的一个示例文件:

; A login sample by zhanglintc

; no timeout for keyword 'wait'
timeout = 0

; login infomation
hostname = 'your_hostname'
username = 'your_username'
password = 'your_password'

; login command
sprintf2 server '%s:22 /ssh /2 /auth=password /user=%s /passwd=%s' hostname username password
connect server

; hello world
wait '$' '#'
sendln 'echo hello world'

其中分号 ; 开始的其实是注释, 但是这个 Markdown 解释器似乎不支持 TTL 语言格式, 我只好设置了 code 格式为 Shell, 然后分号 ; 开始的注释行也没有变成灰色, 只能凑合看了.

TTL 语法

变量定义:

var_int = 1
var_str = 'str'

注释:

; 分号开始的行是注释行
var = 0 ; 这里分号右边开开始也算注释

拼接字符串:

方法一:

其中 %s 是占位符, 被字符串后面跟的变量替换.

hostname = 'your_hostname'
username = 'your_username'
password = 'your_password'
sprintf2 server '%s:22 /ssh /2 /auth=password /user=%s /passwd=%s' hostname username password

方法二:

hostname = 'your_hostname'
msg = hostname
strconcat msg ':22 /ssh /2 /auth=password /user='
strconcat msg username
strconcat msg ' /passwd='
strconcat msg password

连接服务器:

使用 connect 命令, 而且有不少其他命令必须在连接服务器后才能使用:

connect 'hostname:22 /ssh /2 /auth=password /user=username /passwd=password'

保存服务器操作 log:

这个功能很有用:

getdir logdir ; 获取当前脚本所在路径
changedir logdir ; 调整 log 文件夹路径到当前路径
logfile = "operation.log" ; log 文件名
logopen logfile 0 0 1; 打开 log 文件
logwrite "first line in log file"#13#10 ; 其中 #13#10 的意思就是 CRLF

执行某条命令:

sendln `date` ; 向远端服务器上发送 date 命令以及 cr, 即执行改命令

等待某个字符:

wait '$' '#' ; 等待远端服务器屏幕上出现 $ 或者 #. 未出现则一直等待. 该等待超时时间由全局变量 timeout 控制, 若为 0 则无超时时间, 即无限期等待
Comments
Write a Comment