expect是一个用来处理交互的命令。借助于expect我们可以把交互过程写在一个脚本上,使之自动化完成。
expect最核心的四个命令:
send:用于向进程发送字符串
except:从进程接收字符串
spawn:打开一个新的进程
interact:保持交互的状态
首先一个简单的脚本:
#!/usr/bin/expect #定义解释器和shell一样
set user [lindex $argv 0] #定义变量
set host [lindex $argv 1] #
set passwd "8023jun12"
spawn ssh $user@$host #打开一个ssh进程
expect "password:" #捕捉到“password:"字符串时,调用send发送字符串
send "$passwd\r"
interact #ssh登录后保持登录状态,若没有此语句脚本执行完之后就会返回
执行脚本:
[root@slave expect]# ./1.sh root 192.168.1.120
spawn ssh root@192.168.1.120
root@192.168.1.120's password:
Last login: Tue Dec 27 07:27:07 2016 from slave
[root@master ~]#
可以设置超时时间:
set timeout 100:设置超时时间为100秒,如果要执行的shell命令很长可以设置超时时间长一些。expect超过超时时间没有监测到要找的字符串,则不执行,默认timeout为10秒
expect的命令行参数
[lindex $argv n]获得index为n的参数(index从0开始计算)
$argc为命令行参数的个数
[lrange $argv 0 0]表示第一个参数
[lrange $argv 0 3]表示第1到第3个参数
转载于:https://blog.51cto.com/zidingyi/1887482