expect的核心指令有三个:

send :发送一些内容给进程

expect:与send相对,与进程交互,等待输出,判断是否匹配,做出响应。

spawn :启动一个进程


expect指令介绍:

#expect指令等待一个匹配的模式,并作出回应。
expect1.3> expect ming
du
diao
ming
expect1.4>
#直到输入匹配的字符串才会返回。若收到的数据不匹配,便会一直等待。

模式-动作对

expect "zhu" {send "hello\n"}
############################
expect "zhu"
send  "hello\n"
################################
expect {
    "zhu" {send "hello1\n"}
    "zhu2" {send "hello2\n}
}
################################
expect {
    "zhu1" {
        send "hello1\n"
     }
     "zhu2" {
        send  "hello2\n"
     }
}
#expect-action的格式很灵活,应选择自己喜欢的哪种

交互式修改账户密码

[root@zhu1 ~]# expect zhu.exp
spawn passwd zhu
Changing password for user zhu.
New UNIX password:
BAD PASSWORD: it is based on a dictionary word
Retype new UNIX password:
passwd: all authentication tokens updated successfully.
[root@zhu1 ~]# cat zhu.exp
#!/usr/bin/expect
spawn passwd zhu
expect "password:"
send "mingyuex\n"
expect "password:"
send "mingyuex\n"
expect eof


[root@zhu1 ~]# cat  zhu.exp
spawn passwd zhu
expect "password:" {send "mingyuex\n"}
expect "password:" {send "mingyuex\n"}
expect eof

自动登陆远程主机

expect的格式

[root@zhu ~]# cat jiang.exp
#!/usr/bin/expect
spawn ssh root@192.168.56.102
expect {
    "*password" {
         send "123456\n"
    }
    "(yes/no)?" {
         set i 1
         send "yes\n"
    }
}
if { $i == 1} {
    expect "*password" { send "123456\n"}
}
interact
spawn ssh root@192.168.56.102
expect {
    "*password" {
         send "123456\n"
    }
    "(yes/no)?" {
        send "yes\n";exp_continue
    }
}
interact
#!/usr/bin/expect
spawn ssh root@192.168.56.102
expect {
    "(yes/no)?" {send "yes\n";exp_continue}
    "*password" {send "123456\n"}
}
expect "]*"
send "exit\n"
expect eof