简介:

Expect 可以替系统管理员完成与系统的交互式操作

shell > yum -y install expect # 可以通过 yum 安装

shell > which expect # 路径
/usr/bin/expect

例一:

shell > cat login.exp
#!/usr/bin/expect spawn ssh root@192.168.1.81;
expect {
"(yes/no)?" { send "yes\r"; exp_continue }
"password:" { send "123456\r"; exp_continue }
"#" { send "uptime\r"; interact }
}

## 使用 /usr/bin/expect 来解释脚本 , spawn 开启一个 ssh 进程 , expect 用来接收信息 , send 用来发送信息
"(yes/no)?" 当第一次登陆远程主机时会提示 yes/no , 匹配到信息时 send 发送 "yes\r" , \r 为换行 , exp_continue 为继续匹配下一条
"#" 由于是 root 用户登陆 , 那么匹配到正确的密码后会得到超级用户的标志 # 号 , 然后就可以 send 发送系统命令了 uptime
interact 指令意为:保持交互状态 , 将控制权交给控制台 , 也就是说刚登陆到远程主机 , 现在不会退出 , 且管理员可以操作主机

例二:

shell > cat login.exp

#!/usr/bin/expect
set timeout -;
spawn ssh root@192.168.1.81;
expect {
"(yes/no)?" { send "yes\r"; exp_continue }
"password:" { send "123456\r"; exp_continue }
"#" { send "uptime\rexit\r"; expect eof }
}

## set timeout -1 : 设置超时时间 , -1 为无穷大、可以指定例如 20 (单位为秒)
expect eof : 等待进程结束 (不保持交互状态), 当执行命令中没有明确指定退出登陆(exit\r)时 , expect eof 会等到超时时间过后自
动退出远程系统(timeout 设为 -1 时 , 不会退出 ) , 如果明确指定 exit\r (即上面例子)时 , 则执行完命令立即退出远程登陆系统

例三:

shell > cat login.sh

#!/bin/bash
list=("192.168.1.81 root 123456" "192.168.1.82 root 123456" "192.168.1.83 root 123456")
length=${#list[@]} for ((i=;i<$length;i++))
{
host=`echo ${list[$i]} | awk '{print $1}'`
user=`echo ${list[$i]} | awk '{print $2}'`
passwd=`echo ${list[$i]} | awk '{print $3}'` expect -c "
spawn ssh $user@$host;
expect {
\"(yes/no)?\" { send \"yes\r\"; exp_continue }
\"password:\" { send \"$passwd\r\"; exp_continue }
\"#\" { send \"uptime\rexit\r\"; expect eof }
}
"
}

## expect -c 从命令行执行 expect 脚本 现在可以实现循环登陆服务器执行命令后退出远程系统
将 exit\r 去掉 , 并且 expect eof 改为 interact 可以实现停留在远程服务器(只限一台服务器 , 如过多台的话第一台停留就不会循环了)

例四:

shell > cat login.exp1

#!/usr/bin/expect
if { $argc != } {
puts "usage $argv0 user host passwd"
exit
} set user [lindex $argv ]
set host [lindex $argv ]
set passwd [lindex $argv ] spawn ssh $user@$host;
expect {
"(yes/no)?" { send "yes\r"; exp_continue }
"password:" { send "$passwd\r"; exp_continue }
"#" { send "uptime\r"; interact }
}

## $argc 代表参数个数 , $argv0 代表脚本名 , $argv 0 代表第一个参数 ...
如果传递参数不足 3 个 , 那么屏幕显示 usage 脚本名 user host passwd , 所以执行脚本时应: ./login.exp1 root 192.168.1.81 123456
参数不足 3 个则退出脚本
set 将第一个参数赋值给变量 user ...( 变量存储从 0 开始计算 1 2 3 ... n )

Expect 小脚本的更多相关文章

  1. 第一个Mac shell 小脚本

    大多数程序员都喜欢偷懒的,我也不例外.相信好多Android开发的coder 在网络http请求方面,会浪费很多时间在接口调试这里..有时候,自己写了一个小测试,行还好,不行的话,还要跟写后台的哥们一 ...

  2. 写了一个常规性生成merge 的小脚本

    现在使用数据库来写存储过程,动不动参数就会用到xml ,当然罗,优势也很明显,参数相对固定,而且灵活,如果要修改或者什么的,中间接口层也不需要做变化,只需要修改封装的存储过程以及程序传参就ok了. 随 ...

  3. 周末娱乐一下--------恶搞windows小脚本

    下面这是个循环DOS命令,使用了C中的goto语句 echo命令式输出命令 set命令是设置命令 var是变量,初始为0 :continue是一个用于goto的标示. %var%输出变量名,%var% ...

  4. 用Python实现一个爬取XX大学电费通知的小脚本

    内容简要 1分析网站 2简单爬取 3进阶自定义爬取 4保存进数据库 学校基础设施太差,宿舍电量过低提醒虽然贴在楼下,但是作为低头一族,经常忘记看提醒导致宿舍酣战时突然黑屏,为了避免这种尴尬的场景以及强 ...

  5. 分享一个刷网页PV的python小脚本

    下面分享一个小脚本,用来刷网页PV. [root@huanqiu ~]# cat www.py #!/usr/bin/python# coding: UTF-8import webbrowser as ...

  6. 自动FTP的小脚本

    自动FTP的小脚本 使用以下脚本,可以实现自动FTP,将你需要的文件传送到需要的地方,或者将需要的文件从某个地方抓取下来. cd /PATH_YOU_WANT_TO_UPLOAD(DOWNLOAD) ...

  7. pyhton 查找一个数的所有因子 以及 判断一个数是否是质数 两个小脚本

    最近看到一个网站, 欧拉计划.挺好玩,都是一些算法题.这是本站:http://projecteuler.net/problems 这个是中文站:http://pe.spiritzhang.com/ 下 ...

  8. Unity 屏幕适配小脚本

    屏幕适配是可以通过代码实现的,相信给你时间就一定能写出来. 我们公司貌似没有分辨率适配框架通常对应小屏幕的苹果4要额外设置下等等就完了! 屏幕适配框架实现思路:  通过代码获取当前的分辨率 –> ...

  9. 初步学习nodejs,业余用node写个一个自动创建目录和文件的小脚本,希望对需要的人有所帮助

    初步学习nodejs,业余用node写个一个自动创建目录和文件的小脚本,希望对需要的人有所帮助,如果有bug或者更好的优化方案,也请批评与指正,谢谢,代码如下: var fs = require('f ...

随机推荐

  1. XML专题:使用NSXMLParser解析xml文件

    使用NSXMLParser解析xml文件 1. 设置委托对象,开始解析     NSXMLParser *parser = [[NSXMLParser alloc] initWithData:data ...

  2. 接口测试框架——第六篇-读Excel封装方法

    谢谢@小麦苹果的提醒,才发现我借口测试少写了一个文件,今天给大家补上: common->service->excel_case_data.py # coding: utf-8 import ...

  3. php用smtp方式发送邮件

    http://www.daixiaorui.com/read/16.html 2个比较经典的PHP加密解密函数分享 http://www.jb51.net/article/51706.htm php5 ...

  4. python 有关引用的一些问题

    python 有关引用的一些问题 print id.__doc__ ​ id(object) -> integer Return the identity of an object. This ...

  5. hive加载json数据解决方案

    hive官方并不支持json格式的数据加载,默认支持csv格式文件加载,如何在不依赖外部jar包的情况下实现json数据格式解析,本编博客着重介绍此问题解决方案 首先创建元数据表: create EX ...

  6. 空间的搜索与R树

    在现实地图应用中,有个比较常见的问题,比如,你到了一个地方,想查查附近1km内有什么饭店. 这时地图应用就可以马上查询出周围有什么饭店,如果让你设计,你会怎么设计.假设局限在中国的地图上,共有1000 ...

  7. demo 2 chart 报表

    function killerrors() { return true; } window.onerror = killerrors; //检查浏览器类型 function checkBrowser( ...

  8. HDU 1166 敌兵布阵 (线段树模版题)

    敌兵布阵 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Submis ...

  9. Vim编辑器基本操作学习(二)

    操作符+位移 x命令可以删除一个字符,4x可以删除4个字符. dw可以删除一个word,w事实上是向后移动一个word的命令:dw可以接上一个任意一个位移命令,它将删除从当前光标开始到位移终点处的文本 ...

  10. Druid.io系列(七):架构剖析

    1. 前言 Druid 的目标是提供一个能够在大数据集上做实时数据摄入与查询的平台,然而对于大多数系统而言,提供数据的快速摄入与提供快速查询是难以同时实现的两个指标.例如对于普通的RDBMS,如果想要 ...