expect简介
expect 是用来处理交互的命令,它是建立在tcl上的一个工具,通过它可以让一些需要交互的任务通过脚本来执行。
命令说明
解释器说明
#如果在该行后面加上-d,则会输出很多有用的信息。
#!/usr/bin/expect
上面的内容一般放在脚本第一行,用于告诉操作系统,使用expcect执行脚本中的内容。
send/send_user命令
send会将expect脚本中需要的信息发送给spawn启动的那个进程,而send_user只是回显用户发出的信息,类似于shell中的echo而已。
一般send用来发送密码,如:
#结尾需要以\r结束
send "123456\r"
expect命令
一般命令格式为:expect "passwd" { }
表示上次输出的结果中包含"passwd"字符,括号内放上需要执行的操作,此处可以将发送密码放在括号内。
spawn命令
该命令是进入expect命令后才可能执行的,属于expect内的命令。作用是给ssh运行进程加个壳,用来传递交互指令。
spawn后面加上需要执行的shell命令
如:
#用test用户登录到192.168.200.10 执行 ls -trlh 命令
spawn ssh 192.168.200.10 -l test "ls -tlrh ;"
interact命令
执行完成后保持交互状态,把控制权交给控制台。如果没有这一句登录完成后会退出,而不是留在远程终端上。
set命令
设置变量
一般用来设置超时时间,或者根据传入的参数设置相关变量,如:
#将超时时间设置为300s
set timeout 300
#将超时时间设置为永不超时
set timeout -1
命令行参数
可以通过[lindex $argv n]
来获取第n个参数。
也可能通过[lrange $argv start end]
来获取start到end的参数。
exp_continue命令
使用exp_continue命令后,执行会继续从expect开始执行。
实例
!#/usr/bin/expect
set IP [lindex $argv 0]
set USER [lindex $argv 1]
set PASSWD [lindex $argv 2]
spawn ssh ${IP} -l ${USER} " ls -tlrh ;"
set timeout -1
expect {
-re "assword:"{
send "${PASSWD}\r"
send_user "登录成功"
exp_continue
}
eof{
exit
}
timeout{
exit
}
-re "Connection refused"{
send_user"连接被拒绝"
exit
}
-re "yes/no" {
send "yes\r"
exp_continue
}
}
网友评论