expect用法
2015-08-30 11:51
281 查看
1. [#!/usr/bin/expect] 这一行告诉操作系统脚本里的代码使用那一个shell来执行。这里的expect其实和linux下的bash、windows下的cmd是一类东西。 注意:这一行需要在脚本的第一行。 2. [set timeout 30] 基本上认识英文的都知道这是设置超时时间的,现在你只要记住他的计时单位是:秒。timeout -1 为永不超时 3. [spawn ssh -l username 192.168.1.1] spawn是进入expect环境后才可以执行的expect内部命令,如果没有装expect或者直接在默认的SHELL下执行是找不到spawn命令的。所以不要用 “which spawn“之类的命令去找spawn命令。好比windows里的dir就是一个内部命令,这个命令由shell自带,你无法找到一个dir.com 或 dir.exe 的可执行文件。 4. [expect "password:"] 这里的expect也是expect的一个内部命令,有点晕吧,expect的shell命令和内部命令是一样的,但不是一个功能,习惯就好了。这个命令的意思是判断上次输出结果里是否包含“password:”的字符串,如果有则立即返回,否则就等待一段时间后返回,这里等待时长就是前面设置的30秒。 5. [send "ispass\r"] 这里就是执行交互动作,与手工输入密码的动作等效。 温馨提示: 命令字符串结尾别忘记加上“\r”。 6. [interact] 执行完成后保持交互状态,把控制权交给控制台,这个时候就可以手工操作了。如果没有这一句登录完成后会退出,而不是留在远程终端上。 7.$argv 参数数组 expect脚本可以接受从bash传递过来的参数.可以使用[lindex $argv n]获得,n从0开始,分别表示第一个,第二个,第三个....参数 实例脚本
#!/usr/bin/expect #Usage sshsudologin.expect <host> <ssh user> <ssh password> <su user> <su password> set timeout 60 spawn ssh -t [lindex $argv 0] [lindex $argv 2] expect "yes/no" { send "yes\r" expect "*?assword" { send "[lindex $argv 1]\r" } } "*?assword" { send "[lindex $argv 1]\r" } #expect "# " { send "su - [lindex $argv 3]\r" } #expect ": " { send "[lindex $argv 4]\r" } #expect "# " { send "ls -ltr\r" } interact
相关文章推荐
- 奇怪的排序 nyoj 540
- HDOJ2141(map在二分搜索中的应用)
- github使用中的一些问题
- 【NROS-01】Bootloader 引导操作系统
- c++ primer读书笔记之c++11(一)
- 本周总结
- sublime Text3 3083的安装及常用配置
- 3.1-Mysql的root密码重置
- 获取数据库中表名
- STM32F4——定时器原理及应用(中断、输入捕获、PWM输出)
- HDU 1236 排名(水~)
- ORB-SLAM(1) --- 让程序飞起来
- UVa 10868 - Bungee Jumping(物理公式)
- Java项目开发环境构建工具 Gradle 使用笔记(简单、基本)
- 新学校,新感受
- 使用ssh连接中文版linux时候出现乱码的解决方法
- Java 语言中 List、Set 和 Map 的区别
- 【bzoj3505】【CQOI2014】【数三角形】【组合数学】
- HTML初步,编写简历页面。
- ContentProvider的自定义及SMS和CONTACTS的内容提供者