1. Expect基础语法解释
1.1 cmd arg1 arg2 arg3
一条Tcl命令由空格分割的单词组成. 其中, 第一个单词是命令名称, 其余的是命令参数 .
1.2 $myVar $符号代表变量的值. 在本例中, 变量名称是myVar.
1.3 [cmd arg]
方括号执行了一个嵌套命令. 例如, 如果你想传递一个命令的结果作为另外一个命令的参数, 那么你使用这个符号 .
1.4 "some stuff" # "some stuff $myVar "
双引号把词组标记为命令的一个参数. "$"符号和方括号在双引号内仍被解释,意思是可以进行变量替换。
1.5 {some stuff}
大括号也把词组标记为命令的一个参数. 但是, 其他符号在大括号内不被解释. 1.6 \
反斜线符号是用来引用特殊符号. 例如:\n 代表换行. 反斜线符号也被用来关闭"$"符号 , 引号,方括号和大括号的特殊含义 .
基本语法:
1.设置变量值
set str "test"
set time="2016-05-24 16:02:34"
2. 输出一个变量的内容,使用puts
puts $str
3.字符串拼接
append命令 将某个字符串加到另外一个字符串的后面:
eg:append "Now is" $time "。" --//Now is 2016-05-24 16:02:34。
4.运算
使用expr命令作为计算符号,其用法类似C语言的+=和/= ,例如:
set j [expr $i/5]
TCL会自动选择整数或者浮点计算:
set i 10
expr $i /4.0 --//1.25
在TCL里面可以使用+ - * /和%作为基本运算符,另外通常还包括一些数学函数,如abs,sin,cos,exp和power(乘方)等等。 另外,还有一个起运算符作用的命令incr,它用来对变量加一:
set i 1
incr i --//i=2
5.流程控制
Tcl判断:分支语句可以使用if和switch实现。if语句的和C语言类似,如:
if { $ x < 0 } {
set y 10;
}else{
set y 0;
}
注意判断子句也需要使用花括号, 也可以使用else和elseif。
switch语句的用法有点类似这样:
switch $x {
0 { set y 10;}
10 { set y 100;}
20 { set y 1000;}
}
循环:主要由for,foreach和while构成,而且每一个都可以使用break和continue 子句。
for语句的格式:
for { set i 0} {$i< 10} { incr i} {
puts $i
}
如果用while循环,这个句子可以写成 :
while {$i < 10 } {
puts $i;
incr i;
}
foreach是对于集合中的每一个元素执行一次命令, 命令格式是 :
foreach [变量] { 集合 } { 语句; } 例如:
foreach j { 1 3 5} {
put $j;
} --//1 3 5
6. 函数
Tcl里面也可以定义函数,这是通过proc命令实现的:
proc my_proc {i}{
puts $i;
}
这样就定义了一个名字叫proc的函数,它只是在终端显示输入变元的内容。 上述函数的使用方式如下:
my_proc { 5 } --// 5
如果变元的数目是0,只要使用空的变元列表,例如 proc my_proc {} {语句;}
//OTHER///
1)spawn语句在expect脚本中用于启动一个新的进程,在我们的程序中,spawn sftp 192.168.1.1 就是去执行sftp程序,其他的就是expect和send的指令对了。
2)缺省下,expect在标准输出来输出所有来自应用程序的回应信息,你可以用下面的两个命令重定向这些信息:
log_file [日志输出文件名]
解释:这个命令让expect在你设置的文件中记录输出信息。必须注意,这个选项并不影响控制台输出信息,但如果你通过crond设置expect脚本定时运行的话,该命令就显得尤为重要和方便。