先说两个交互式任务的例子:
1、数据库执行操作

2、修改密码

以上两种操作比较常见,共同的特点就是需要先执行一个命令,进入后,再执行相关操作。对于数据库这样的操作一般只需要执行一批sql或命令,就可以利用shell中的特殊的定向输入符号<<实现交互。也就说可以通过红框中的方法实现不用交互也可以在shell中实现交互操作。但对于第二种修改密码的情况,需要交互输入多次才能完成。这样的操作如何实现自动交互呢?
通常我们都是通过expect,expect是一个免费的编程工具,用来实现自动的交互式任务,而无需人为干预。说白了,expect就是一套用来实现自动交互功能的软件。
使用方法如下:

通过以上的shell脚本就可以实现root su的切换
对于expect的使用方法,文章已经很多了,有兴趣的可以自己了解一下,python语言也有类似实现,但由于expect并不是默认系统中自带的,安装比较繁琐,我们今天就给大家介绍一个go开发的小工具。
该工具,只有一个执行程序expect和一个配置文件expect.xml

配置文件如下:
<?xml version="1.0" encoding="UTF-8" ?>
<Config>
<runcmd>su - root</runcmd>
<expects>
<ex>
<expect><![CDATA[密码:]]></expect>
<send>root</send>
</ex>
<ex>
<expect><![CDATA[#]]></expect>
<send>cat etc/passwd</send>
</ex>
<ex>
<expect><![CDATA[RE(.+):x:497:497]]></expect>
<send>id ###1###</send>
</ex>
</expects>
</Config>
该工具除了可以实现expect的功能,也就是等待收到一个指定字符串后发送一个字符串的交互之外,还可以对收到的字符进行正则解析,将解析到的字符串作为下一个指令中的参数,这样就可以实现更多的交互任务。
以上的配置任务实现的目的就是切换到root下,查看密码文件,并解析id为497的用户的用户名,将该用户名作为下一个参数,执行id 查询相关信息。

该工具可以使用的场景如下:
1、修改密码
2、ftp或ssh交互操作
3、corba接口订阅
4、数据库交互




