Linux下两种实用自动交互方法
来源:互联网 发布:android 电量优化 编辑:程序博客网 时间:2024/05/21 22:22
在网上搜索一大堆以后我总结到了2个Linux交互的方法。
第一个方法 – 管道法
这个办法不是所有的地方都有用,但是呢他非常的简单方便,不需要装第三方软件的支持,在一些命令比如passwd上就非常有用了。
代码如下:
- #!/bin/bash
- (echo "curpassword"
- sleep 1
- echo "newpassword"
- sleep 1
- echo "newpassword")|passwd
这个是sh脚本,如果想直接在shell里面操作就要这样写
- 后执行的命令 | 先执行的命令
- 比如:
- (echo 123;echo 123) | passwd
- Enter new UNIX password: Retype new UNIX password: passwd: password updated successfully
- 这个命令就会先执行passwd然后执行前面的 echo 123将向控制台输出123 , 多个语句必须使用;来分开,另外必须用括号包裹起来。
- 这个命令运行以后将会修改当前用户的密码 为123
第二个方法 – 强大的expect
expect是一个非常强大的shell工具,因为expect本来就是为实现自动交互功能而生,但是他也有个缺点,大多数的Linux都没默认安装它,需要自行安装一次。
Ubuntu用户用apt-get install expect
CentOS用户用yum install expect
来安装这个工具
首先我们要创建一个脚本文件,比如autostart,用vi进行编辑输入下面的代码
#!/usr/bin/expect
spawn /etc/webmin/start
expect "Enter PEM pass phrase:"
send "password\n"
expect eof
exit解释下:
第一行是可以理解成声明,反正这个必须的!
第二行spawn代表运行文件
第三行如果出现了Enter PEM pass phrase:
第四行则输出password和一个回车
第五行expect eof可以理解成是退出判断,这个是必须的,跟编程里面的}一样
最后一个是退出就不解释了。。
expect因为过于强大,所以有点难懂,建议大家多看看其他例子(搜索引擎关键字:expect 例子)和基本用法。
参考:http://xloli.net/html/201108/thread-2766-1-1.html
expect脚本
前几天在写脚本的时候我有一个功能是想切换用户,让他自动输入密码。我觉得shell脚本实现不了,于是就上网查询,
发现expect脚本可以实现,但是一直没有试验,今天闲来没事就做一下测试。
1。首先确认expect的包要安置。
[[zhuying@SOR_SYS opt]$ rpm -qa | grep expect
如果没有则需要下载安装,我安装的是expect-5.42.1-1.x86_64.rpm和expect-devel-5.42.1-1.x86_64.rpm
安装过后会显示:
[[zhuying@SOR_SYS opt]$ rpm -qa | grep expect
expect-5.43.0-5.1
expect-devel-5.42.1-1
2.查看expect的路径,可以用
[zhuying@SOR_SYS opt]$ which expect
/usr/bin/expect
[zhuying@SOR_SYS opt]$ view autosu.sh
3。确定脚本有可执行权限
chmod +x autosu.sh
#!/usr/bin/expect -f //这个expect的路径就是用which expect 查看的结果
spawn su - oracle //切换用户
expect "password:" //提示让输入密码
send "99billzy\r" //输入oracle的密码
interact //操作完成
这在root用户切换到oracle用户的时候特别的快,但是在其他用户切换到oracle的时候则需要等待一段时间!
另外需要注意的是:
不能按照习惯来用sh autosu.sh来这行expect的程序,会提示找不到命令,如下:
autosu.sh: line 3: spawn: command not found
couldn't read file "password:": no such file or directory
autosu.sh: line 5: send: command not found
autosu.sh: line 6: interact: command not found
因为expect用的不是bash所以会报错。执行的时候直接./autosu.sh就可以了。~切记!
参考:http://blog.csdn.net/zhuying_linux/article/details/6657020
- Linux下两种实用自动交互方法
- Linux Shell自动交互
- 数据库知识:linux自动备份mysql数据库 实用方法
- Linux自动备份MySQL数据库的实用方法
- Linux自动备份压缩MySQL数据库的实用方法
- Linux Shell自动交互的三种方法
- Linux Shell自动交互的三种方法
- 实现Linux Shell自动交互的三种方法
- Linux Shell自动交互的三种方法
- Linux Shell自动交互的三种方法
- 教会你Linux Shell自动交互的三种方法
- 教会你Linux Shell自动交互的三种方法
- 教会你Linux Shell自动交互的三种方法
- 教会你Linux Shell自动交互的三种方法
- Linux Shell自动交互的三种方法
- Android Fragment实用方法及交互实例
- Android Fragment实用方法及交互实例
- Linux的脚本自动 交互
- 如何创建支持不同屏幕尺寸的Android应用
- hdu 4668 Finding string
- jni参数详解
- android Gridiew等长按和短按的区别处理(如果是长按就相应长按而不执行短按,android长按时默认短按会执行的)
- javascript 中的 new 操作
- Linux下两种实用自动交互方法
- V4l2 Capture Sequence
- apache中伪静态配置和使用
- 读论文笔记:Unsupervised Joint Object Discovery and Segmentation in Internet Images
- psexec在第一次运行的时候会弹出框框,让用户选择是否允许此软件运行,如何去除它?
- spring aop浅析
- apologize
- android (java) 网络发送get/post请求参数设置
- MyEclipse中如何修改SVN的地址