本文主要包括两个部分:expect命令的使用示例和对该示例进行说明。
站在用户的角度思考问题,与客户深入沟通,找到崆峒网站设计与崆峒网站推广的解决方案,凭借多年的经验,让设计与互联网技术结合,创造个性化、用户体验好的作品,建站类型包括:成都网站设计、成都网站制作、外贸网站建设、企业官网、英文网站、手机端网站、网站推广、主机域名、网页空间、企业邮箱。业务覆盖崆峒地区。
1. expect命令的使用示例
IP=192.168.1.18 PASS=passwd expect -c " settimeout 60; spawn ssh root@192.168.0.1 expect{ \"*yes/no*\"{send \"yes\r\"; exp_continue} \"*password*\"{send \"$PASS\r\";} } expect eof"
2. 针对示例,对expect命令的使用进行说明
(1) -c标志之后的命令在任何脚本之前执行,该命令应当被引用以防止被 shell破坏。
(2) set timeout 60:设置超时时间,计时单位为秒,timeout -1为永不超时。
(3) spawn是expect的初始命令,用于启动一个进程,之后所有的expect操作都在这个进程中进行,如果没有spawn语句,整个expect就无法进行下去,当然,如果真的不要spawn过程也没有关系,虽然这样就没有办法单独执行,但是这个脚本可以与任何调用它的进程进行交互。
(4) expect用于等候一个相匹配的输出,一旦匹配就执行后面的动作。在这个例子中,expect是依附于spawn命令的,当spawn后面的命令执行完毕后,expect命令就匹配命令执行后的关键词(yes/no),如果匹配到,就执行后面{ }中动作。
(5) expect的匹配可以看做是一个循环,通常匹配之后都会退出语句,但如果有exp_continue,则可以不断循环匹配。在该例子中,遇到“yes/no”时,送出“yes”,然后继续expect,遇到密码提示时,送出密码,送完后退出。
(6) eof是必须去匹配的,在 spawn进程结束后会向 expect发送 eof;如果不去匹配,有时也能运行,比如 sleep多少秒后再去 spawn下一个命令,但是不要依赖这种行为,很有可能今天还可以,明天就不能用了。但是,如果不需要spawn的进程结束,不能 expect eof了,如下面的例子:
#!/usr/bin/expect set timeout 30 spawn ssh 10.192.224.224 expect"password:" send"mypassword\n" expect "*$" send "mkdirtmpdir\n" expect"*$"
手动操作时 ssh实际上也不会自己结束除非你 exit;所以你只能expect bash的提示符,当然也可以是机器名等,这样才可以在远程创建一个目录。
名称栏目:shell学习之expect命令
链接URL:http://lswzjz.com/article/goocie.html