首页 > 系统服务 > 详细

linux expect 简介与使用

时间:2016-03-05 14:52:08      阅读:148      评论:0      收藏:0      [点我收藏+]

先简单的介绍一下expect的使用实例
通常是用来ftp或者ssh交互时必须要人工操作的
但是、有的时候需要批量操作多台机器的时候、也不能一台一台的处理
那么expect的脚本就可以用的上了、
但是expect有一个比较大的弊端、就是它是一个脚本的语言
所有的代码全世界都可以看懂
那么安全问题就是一个很大的问题、
首先不的不说的就是权限的问题、一定要给的就是700
其它用户一定不要有读权限

接下来贴一段expect的代码,这也是我测试用的ssh

#!/usr/bin/expect -f
spawn ssh ll@localhost
expect "*password:"
send "123456\r"
expect "*$*"
send "echo ‘hello world‘\r"
send "sleep 1\r"
send "exit\r"
expect eof


第一行是一个魔法串、用来告诉解释器本脚本是expect
spawn 之后加上的就是你打算的操作、可以全部替换成变量的那种操作如果
是为了方便的话
expect 加上的就是你想要期待的字符、一般用的是 *关键字* 如果你确定
你的匹配不会出错、那么怎么匹配都没问题
匹配以后的send就是相当于手打的一样、最后加上一个\r代表回车
这就是最简单的一个流程
还有一种就是用花括号的方法来做,一会有机会介绍一下

expect {
"*yes/no*" { send "yes\n"}
"*password*" {send "123456\r"}
}

这里需要注意的就是、expect 与花括号之间需要一个空格间隔
或者就是加一个tab都没问题
还有就是 expect “*$” 或者 “*#” 后面一般匹配PS1后面加个空格
要不就加个 * 通配符,省的半天不知道错哪

接下来介绍一下另一种匹配的问题,
按照正常的来说、一般expect会用的匹配就是linux的正则、
跟sed等的正则不一样、*是一个通配符、但是
某些时候需要匹配的东西用通配符搞不定
那么就可以使用正则表达式
就是通常sed、awk用到的正则
接下来贴一下代码
就是上一个的改进版

#!/usr/bin/expect -f
spawn ssh ll@localhost
expect -re "^.*password.*$"
send "123456\r"
expect "*$*"
send "echo ‘hello world‘\r"
send "sleep 5\r"
send "exit\r"
expect eof

仅仅是第四行有了一些改变、毕竟是为了实验
加了一个 -re  参数、re就是正则regular的缩写
之后的“”之间就可以利用正则来写了、个人感觉用处不大
一般通配符就搞定了、为了文章的完整性、就写一下把

Expect中最关键的四个命令是send,expect,spawn,interact。

send:用于向进程发送字符串
expect:从进程接收字符串
spawn:启动新的进程
interact:允许用户交互


接下来介绍一下interact表示允许用户交互、也是一个比较鸡肋的用途把
贴一下代码

root@lp:~/pwb/tmp# cat ssh3.exp 
#!/usr/bin/expect -f
spawn ssh ll@localhost
expect -re "^.*password.*$"
send "123456\r"
expect "*$*"
send "echo ‘hello world‘\r"
send "sleep 5\r"
interact
root@lp:~/pwb/tmp# ./ssh3.exp 
spawn ssh ll@localhost
ll@localhost‘s password: 
Last login: Sun Mar  6 10:50:06 2016 from localhost
Could not chdir to home directory /home/ll: No such file or directory
$ echo ‘hello world‘
sleep 5
hello world
$ $

最后的exit让我去掉了、那么最终不会退出
将把交互交给用户、就是这样、不过基本用不上

还有一件事、就是我是做测试用、并没有写太多
最好就是加上timeout

set timeout 60
这个写在开头就可以
timeout的时间单位事秒

这就是今天所有的总结了、就这样
一般了解这么多就够了、其他的总结也没啥用,用bash就没问题了

本文出自 “Dashazi's blog” 博客,转载请与作者联系!

linux expect 简介与使用

原文:http://dashazi.blog.51cto.com/10354524/1747788

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!