1、头部第一行必须是这个

#!/usr/bin/expect        #####定义了是什么脚本器

2、接管参数

set name [lindex $argv 0]set name2 [lindex $argv 1]puts $argvcputs $argv0expect eofexit#set 赋值参数的意思#name 参数名,设置时不须要加任何符号,前面对该参数的调用时须要加$符号,$name#[lindex $argv 0] 参数写法就是这样,0示意第一个参数#puts 输入字符串#$argvc 参数数量#$argv0 文件名#最初是期待标示子过程已完结的标示符eof,而后退出。(注:这个期待eof必须要有,如果没有eof,很可能在子过程没有完结前就退出,造成问题。)#执行的格局./test.exp 参数0 参数1

3、执行命令

set timeout 5spawn ssh test@172...expect "*password*"send “my_password\r”interact#这几句个别都一起用#set timeout 是设置过期工夫,例如spawn执行的shell语句如果超时了,没有匹配到expect的字符串,就会继续执行下一个语句#spawn 执行shell命令,会fork出一个子过程执行#expect 执行完shell命令之后冀望承受的字符串,反对正则匹配#send 示意输出,记得要写\r,回车让程序执行#设想一下平时本人用ssh近程登录服务器就能了解什么意思了,输出完ip地址之后,都须要手动输出明码,用expect能够主动实现##interact,执行完之后子过程把用户权交回给用户,会定位到以后子过程中,例如你执行完近程登录,就必定是停留在近程的服务器里

4、其余语法格局

##switchset color  [lindex $argv 0]switch  $color  {        apple {                puts "apple is blue"        }        banana {                puts "banana is yellow "        }}##ifif { "$test" == "apple" } {        puts "$test"} else  {        puts "not apple"}##forfor {set i 0} {$i<4} {incr i} {        puts "$i"}##whilewhile {$i<4} {        puts "$i"        incr i}##定义函数proc test {} {        puts "ok"}