1、头部第一行必须是这个
#!/usr/bin/expect #####定义了是什么脚本器
2、接收参数
set name [lindex $argv 0]
set name2 [lindex $argv 1]
puts $argvc
puts $argv0
expect eof
exit
#set 赋值参数的意思
#name 参数名,设置时不需要加任何符号,后面对该参数的调用时需要加$符号,$name
#[lindex $argv 0] 参数写法就是这样,0表示第一个参数
#puts 输出字符串
#$argvc 参数数量
#$argv0 文件名
#最后是等待标示子进程已结束的标示符eof,然后退出。(注:这个等待eof必须要有,如果没有eof,很可能在子进程没有结束前就退出,造成问题。)
#执行的格式
./test.exp 参数0 参数1
3、执行命令
set timeout 5
spawn 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、其他语法格式
##switch
set color [lindex $argv 0]
switch $color {
apple {
puts "apple is blue"
}
banana {
puts "banana is yellow "
}
}
##if
if { "$test" == "apple" } {
puts "$test"
} else {
puts "not apple"
}
##for
for {set i 0} {$i<4} {incr i} {
puts "$i"
}
##while
while {$i<4} {
puts "$i"
incr i
}
##定义函数
proc test {} {
puts "ok"
}
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。