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
转载于:https://blog.51cto.com/zhujiangtao/1400696