首页 > 其他分享 >速成Tera term TTL脚本语言

速成Tera term TTL脚本语言

时间:2022-11-26 00:34:48浏览次数:61  
标签:字符 term log flag TTL 字符串 wait sendln 脚本语言

官方手册:https://ttssh2.osdn.jp/manual/4/en/macro/index.html
Tera term的脚本和log均不支持中文,书写时尽量使用英文,否则会出现乱码。

首先举个例子,编写一个循环开机测试:

场景描述

  • 上电开机 - 等待出现某行字符 - 激活控制台 - 在控制台中输入reboot - 重启 - 重复100次 ……

样例代码

; powercycle.ttl
for i 1 100
	wait "rock-3a login:"
	pause 5
	sendln "username"
	sendln "password"

	sendln "sudo reboot"
	sendln "password"
next

修饰一下样例代码,将日志打印到d盘powercycle.log,打印时间戳和次数记录:

; powercycle_logged.ttl
changedir "d:"
logopen "powercycle.log" 0 0 1 1
for i 1 100
  wait "rock-3a login:"
  sprintf "%s %d %s"  #13"*** This is " count " time(s) for powercycle ***"#13
  logwrite inputstr

  pause 5 /* Wait for other init process after cli available */
  sendln "username"
  sendln "password"

  sendln "sudo reboot"
  sendln "password"
next
wait "rock-3a login:"
logclose

一点点语法

如何表示常量

  1. $[十六进制]:例如$3a,代表十进制的58
  2. ttl语法不支持浮点数
  3. ttl语法不区分单引号和双引号,但是必须成对使用。连续多个字符串自动拼接。
  4. #[ASCII编号]:例如#65,代表字符“A”。也可以用来发送不可见的控制符,例如#13代表换行符。

如何表示变量

  1. 变量或标号名必须字母或下划线开头,不区分大小写,最长32字节
  2. 有一些预留关键字不能作为变量名,见官方手册
  3. teraterm有一些系统变量,例如timeout用于存放超时条件,result用于存放执行结果等,类似于CPU内部的部分寄存器,在判断结束后根据寄存器的值了解判断结果。

标号

  1. 标号可以和return成对使用,达到函数调用的效果。
  2. call [标号]用于跳转到标号的位置执行。

常见运算符

  1. 基本和C语言一样
  2. “=”和“==”都可以用于等于判断
  3. and or xor not是位运算符,不是逻辑运算符

循环和条件

由于没有缩进和大括号控制语句块,循环和条件都有特定的结束语句。

if <cond1> then
  ......
elseif <cond2> then
  ......
endif

for i <start> <end>
  ......
next

while <cond>
  ......
endwhile

此外,break用于跳出循环,continue用于跳过本轮循环。

语句格式

  1. 总长度:一行最多1023个字符
  2. 注释:以分号“;”开头,也支持C语言的“/” “/”
  3. 缩进(tab或空格):和注释一样,无实际作用。
  4. 赋值:每一行的第一个“=”视作赋值号,后面的等于都视作逻辑判断等于。
  5. 标号:冒号开头的代表label

个人觉得有价值的命令

  1. 交互命令:
  • clearscreen <int>:清屏。int=0时清屏,int=1时清屏+清缓冲区

  • dispstr <data1> [<data2>....]:在屏幕上输出字符。注意:data如果是数字,会取低8位作为ASCII字符进行打印,而不是把data当成数字打印;在屏幕上输出的字符仅本地可见,对远端没有影响。

  • fluashrecv:清空接收字符缓存。防止wait命令从接收缓存读取到异常字符。

  • gethostname <strvar>:把主机名/IP地址存放到strvar字符串变量里。可以用作日志输出。

  • logclose:关闭日志文件

  • logopen <filename> <binary flag> <append flag> [<plain text flag> [<timestamp flag> [<hide dialog flag> [<include screen buffer flag> [<timestamp type]]]]]:把收到的字符输出到filename文件中,后面都是flag。

    • filename:不指定目录的时候,默认输出到teraterm的当前目录(可用changedir变更)
    • binary flag:0-CR转换为CRLF,转义符被剔除;1-不转换,收到什么存什么
    • append flag:0-创建新文件,覆盖现有文件;1-创建新文件,在现有文件追加
    • plain text flag:1-非ASCII可见字符不输出到log。

    (一般下面不用看)

    • timestamp flag:1-在每一行log加入时间戳
    • binary flag:1-忽略plain text flag和timestamp flag
    • hide dialog flag:1-不显示Log对话框
    • include screen buffer flag:1-当前屏幕缓冲区在log打开后立即写入log
    • timestamp type:时间戳类型。例如0-本地时间,1-UTC时间
  • logpause:接下来收到的字符不要写入log。和logstart配合使用,logstart恢复log记录。

  • logwrite <string>:写一句string到log,string不能是空的。

  • send <data1> <data2>....:发送字符。data里面有整数时,取整数的低8位视作ASCII字符进行发送。

  • sendln <data1> <data2>....:发送字符,最后加一个回车。

  • wait <string1> [<string2> ...]:等待最多10个字符串中任意一个的出现。字符串为空时代表一个任意字符。系统变量timeout/mtimeout大于零时代表最长等待时间。等待结果存放在系统变量result中,0为超时,n为第n个字符串出现了。

  • waitln <string1> [<string2> ...]:以行为单位的wait。

  • wait4all <string1> [<string2> ...]:等待10个字符串的同时出现。

  • waitevent <events>:等待event出现,例如events=4时代表disconnect。

  • waitrecv <sub-string> <len> <pos>:等待接收到满足某个条件的字符串。条件具体指的是总长为len,从pos位置开始是sub-string。

  • waitregex <string1 with regular expression> [<string2 with regular expression> ...]:等一个符合正则表达式的字符串出现。

  1. 控制语句:
  • pause <time>:像其他语言中的sleep,等待time秒。
  1. 字符串操作:
  • int2str <strvar> <integer value>:整数转字符串。
  • str2int <intvar> <string>:字符串转整数。
  • sprintf FORMAT [ARGUMENT ...]:类似c语言sprintf,输出格式字符串到系统变量inputstr中。
  • sprintf2 strvar FORMAT [ARGUMENT ...]:类似c语言sprintf,输出格式字符串到变量strvar中。

标签:字符,term,log,flag,TTL,字符串,wait,sendln,脚本语言
From: https://www.cnblogs.com/namiya/p/16926572.html

相关文章