小型自动化运维--expect入门知识
Expect的自动交互工作流程简单说明:
spawn启动指定进程-->expect获取期待的关键字-->send向指定进程发送指定字符-->进程执行完毕,退出脚本。
-
spawn命令
如果没有spawn命令,expect程序将会无法实现自动交互。
spawn命令的语法为:
spawn [选项] [需要自动交互的命令或程序]
例如:spawn ssh root@192.169.5.74 uptime
说明:在spawn命令的后面,直接加上要执行的命令或程序(如上例的ssh命令)等,除此之外,spawn还支持一些选项(了解即可!)
-open:表示启动文件进程;
-ignore:表示忽略某些信号;
-
expect命令
expect命令的语法为:
expect 表达式 [动作]
例如:spawn ssh root@192.169.5.74 uptime
expect "*password" {send "root\r"}
说明:上述命令不能直接在linux命令行中执行,需要放入expect脚本中进行。
-
根据上述两个命令,写一个简单的expect脚本
方法一:
#!/usr/bin/expect ##可以使用which expect查看
spawn ssh root@192.169.5.74 uptime
expect "yes/no" {send "yes\n"}
expect "*password" {send "root\n"} ##\n表示换行,这里也可以使用\r表示回车
expect eof ##想要输出结果,必须加上eof(end of file),表示expect的结束
执行的结果如下:
# "*password" {exp_send "root\n"}
"yes/no" {send "yes\r";exp_continue}
"*password" {send "root\n"}
}
expect eof
说明:(1)exp_send和send类似,后面的\r(回车),\n(换行);
(2)expect {},类似于多行expect;
(3)匹配多个字符串,需要在每次匹配并执行动作后,加上exp_continue。
-
send_user命令,类似shell里的echo命令
#!/usr/bin/expect
send_user "My name is wtf.\n"
send_user "I am a linuxer,\t" ##制表符
send_user "My blog is
执行的结果如下: