DC入门——TCL脚本基础语法(1)
TCL与synopsis DC
Tcl 全称是 Tool command Language。它是一个基于字符串的命令语言,基础结构和语法 非常简单,易于学习和掌握。
Tcl 语言是一个解释性语言,所谓解释性是指不象其他高级语言需要通过编译和联结,它象其 他 shell 语言一样,直接对每条语句顺次解释执行
Tcl 数据类型简单。对 Tcl 来说,它要处理的数据只有一种——字符串。Tcl 将变量值以字符 串的形式进行存储,不关心它的实际使用类型。
Tcl 的执行是交互式的,Tcl 提供了交互式命令界面,界面有两种:tclsh 和 wish。tclsh 只支 持 Tcl 命令,wish 支持 Tcl 和 Tk 命令。通过交互界面,我们就可以象执行 UNIX shell 命令一
样,逐条命令执行,并即时得到执行结果
TCL的基本语法
command arg1 arg2
基本结构就是 命令加参数
TCL命令的执行方式,除了在shell中交互式的执行,还可以将将TCL命令保存到一个后缀为.tcl 的文件中,然后用source 来执行,
source script.con
为什么时序和面积的约束脚本文件 DC中用的CON文件呢?
输出。赋值与替换
输出命令: put
变量定义和赋值命令: set& unset(释放变量)
替换:
1. 引用替换 $
替换这里有点难搞:
不与理睬。相当于c语言中的取地址还是取变量值的操作。
2.【】命令替换
3.“”和 {}将多个单词组成一个参数,也是一种替换操作,主要是字符的替换
4. \ 的作用是引用特殊字符、续行
set foo oo
set dollar foo
set x $$dollar
2. []做命令替换
set b [set a 5]
puts $b
=> 5
set c [expr 5*10]
=>50
puts stdout"The length of \"$s\"is [string length $s]";#"string length"命令是计算
;#字符串的长度,用反斜杠“、”来引用特殊字符。
=>the length of hello is 5
puts stdout {the length of $s is [string length $s]}
=>the length of $s is [string length $s]# 不加反斜杠会使替换操作被阻止
set x 100
set y "$x"
=> 100
set y "\$x"
=>$x
puts "he\llo"
=>he
llo
puts "\a"
set b [puts \
$y] #代码换行
=> $x
;#当用 set 命令为参数赋值并"\"用做续行时,小心不要在\后同一行上再输入任何符号,包括 空格符和制表符。否则反斜杠就起不到续行的功能,易引起错误,如果是交互式行命令输入, 这种错误立刻就可以检查出来,而如果是包含在脚本文件中则较难查出。下例就列举了一些不 规范的续行操作
数学表达式与expr命令
tcl是基于字符串操作的但也提供了有效的数学运算和逻辑运算功能,通过expr可以实现对数学表达式的分析和计算。
incr命令
incr varname ?step?
set a 10;incr a
=>a=10
set a 10;incr a -1
=> a=9
字符串
tcl将所有变量值视作字符串,并将他们作为字符串来保存
append 命令将值追加到字符串尾
format 命令 类似于c语言中的printf和sprintf 根据一组格式说明来格式化字符串,此命令不会改变被操作字符串的内容;
scan 命令 解析一个字符串并将对应值赋给后面的变量,返回成功转换的个数
binary 命令 二进制字符串的支持 用二进制要比ASCII码更节省存储空间 此命令的作用是将数值根据规定模式对Tcl的普通数据进行二进制压缩; 而binary scan的作用相反
set var1 Hello
set var2 World
append var1$var2
=>helloWorld
puts $var1
=>HelloWorld
set res [format "%2\$s" 1 5 9]#要取第二个变元值,即5.位置说明符的格式为2$,并用、来引用符号$;
=> 5
puts $res
=>5
set str [format "%3\$s %1\$s %2\$s" "are""right""You"]
=> you are right
format "%x" 20
=> 14 #将20转化为16进制
format “%8x” 20
=> 14#将20转换为16进制数,8位的数据宽度,右对齐
format “%08x” 20
=> 0000014 #与上一条命令相似,但用0补位
format "%-8x" 20
=>14 #宽度8位 左对齐
format "%#08x" 20
=> 0x000014 #添加前缀的操作
set num [scan"abcABC" "%c%c" var1 var2]#这是指定输出变量的 如果未指定输出变量var1 var2 会直接返回两个转换后的值
=> 2#这里返回的是成功转换的个数
#我们将参数12输出
puts $var1 $var2
=>97 98
#格式描述说明要扫描小谢=写a到z区间的连续字符
scan "ABCabc"{%[A-b]}res
=> 1
puts res
=>ABCab
set b[binary format "s"25664]
# 整数25664 以16进制表示为6440H s为格式说明符,按照由低到高字节顺序存储
=> @d
puts $b
=>@d
binary scan $b "s" var #s自己顺序为little-end的16位整数
=>1
puts $var
=> 25664
binary scan 1 c var# c一个8位字符编码 binary scan中会从字符串将字符转换为对应整数
=>1
puts $var
=> 49
二进制转换的命令 binary format&scan 可以将字符 对应的整数值 ASCII输出 可以获得多个字母对应的整数值,并保存到同一个列表或者分开保存
subst命令 在字符串中搜索[]$,并对其进行替换操作,而对其他数据不作处理,字符串内部的花括号对这种替换操作不阻止
string 命令 内含大量的字符串操作命令,
上一篇: DC-1靶机渗透学习笔记