欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  数据库

如何向shell scripts中的交互过程推送文本信息

程序员文章站 2022-05-10 09:18:44
...

这哥们公司的开发部门写了一个jboss的脚本,用于启动jboss程序,需要输入下面类似的命令:./jboss_init.sh start然后会在脚本的提

一哥们提了一个问题,觉得比较有意思,小研究了下:
这哥们公司的开发部门写了一个jboss的脚本,用于启动jboss程序,需要输入下面类似的命令:
./jboss_init.sh start
然后会在脚本的提示下输入一个密码确认,然后才能启动。
问题是这样的,他不想手工输入这个密码,希望程序能够自动完成这个输入过程(因为搞技术的的都是很懒的一批人,懒人成就了技术革新)

为模拟上述的大致环境,我找到了sqlplus程序,sqlplus程序在指定用户名不指定密码的时候,会提示用户输入密码
如下:
[Oracle@rac1 scripts]$ sqlplus mai
SQL*Plus: Release 11.2.0.1.0 Production on Wed Sep 4 16:50:34 2013
Copyright (c) 1982, 2009, Oracle. All rights reserved.
Enter password:


于是就写出了下面的这个脚本:
[oracle@rac1 scripts]$ more t.sh
#!/usr/bin/expect
set timeout 10
spawn /u02/db_1/bin/sqlplus mai
expect "password:"
send "mai\r"
interact
注:大部分系统是没有安装expect工具的,需要进行手工安装一下,安装完成之后的程序就是在/usr/bin/expect下
上面的timeout表示一个时间,给出脚本推送文本的时间
spawn的话,就是执行相关的触发命令,这个命令也可以是一个脚本
expect的话,就是查找相应的字段,,准备在其后输入参数值
send很明显,就是发送文本,后面的\n表示键入一次回车
interact的话,就是使当前脚本恢复交互模式,如果没有这一行的话,那么脚本就会在延时时间到之后自动退出


执行如下:
[oracle@rac1 scripts]$ ./t.sh
spawn /u02/db_1/bin/sqlplus mai
SQL*Plus: Release 11.2.0.1.0 Production on Wed Sep 4 16:53:05 2013
Copyright (c) 1982, 2009, Oracle. All rights reserved.
Enter password: mai


Connected to:
Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - 64bit Production
With the Partitioning, Real Application Clusters, Automatic Storage Management, OLAP,
Data Mining and Real Application Testing options


SQL> exit
Disconnected from Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - 64bit Production
With the Partitioning, Real Application Clusters, Automatic Storage Management, OLAP,
Data Mining and Real Application Testing options

有上面的结果可见:成功登陆,OK了!

特别注意:
在大部分的脚本程序中,是不允许吧明文密码直接写入脚本中的,这样容易造成密码的泄露。
在此仅仅是使用了sqlplus这个工具模拟了这个过程,显示中的实用性还是有一些的,但是不建议使用。

Linux中shell scripts