Expect 小脚本
简介:
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 小脚本的更多相关文章
- 第一个Mac shell 小脚本
大多数程序员都喜欢偷懒的,我也不例外.相信好多Android开发的coder 在网络http请求方面,会浪费很多时间在接口调试这里..有时候,自己写了一个小测试,行还好,不行的话,还要跟写后台的哥们一 ...
- 写了一个常规性生成merge 的小脚本
现在使用数据库来写存储过程,动不动参数就会用到xml ,当然罗,优势也很明显,参数相对固定,而且灵活,如果要修改或者什么的,中间接口层也不需要做变化,只需要修改封装的存储过程以及程序传参就ok了. 随 ...
- 周末娱乐一下--------恶搞windows小脚本
下面这是个循环DOS命令,使用了C中的goto语句 echo命令式输出命令 set命令是设置命令 var是变量,初始为0 :continue是一个用于goto的标示. %var%输出变量名,%var% ...
- 用Python实现一个爬取XX大学电费通知的小脚本
内容简要 1分析网站 2简单爬取 3进阶自定义爬取 4保存进数据库 学校基础设施太差,宿舍电量过低提醒虽然贴在楼下,但是作为低头一族,经常忘记看提醒导致宿舍酣战时突然黑屏,为了避免这种尴尬的场景以及强 ...
- 分享一个刷网页PV的python小脚本
下面分享一个小脚本,用来刷网页PV. [root@huanqiu ~]# cat www.py #!/usr/bin/python# coding: UTF-8import webbrowser as ...
- 自动FTP的小脚本
自动FTP的小脚本 使用以下脚本,可以实现自动FTP,将你需要的文件传送到需要的地方,或者将需要的文件从某个地方抓取下来. cd /PATH_YOU_WANT_TO_UPLOAD(DOWNLOAD) ...
- pyhton 查找一个数的所有因子 以及 判断一个数是否是质数 两个小脚本
最近看到一个网站, 欧拉计划.挺好玩,都是一些算法题.这是本站:http://projecteuler.net/problems 这个是中文站:http://pe.spiritzhang.com/ 下 ...
- Unity 屏幕适配小脚本
屏幕适配是可以通过代码实现的,相信给你时间就一定能写出来. 我们公司貌似没有分辨率适配框架通常对应小屏幕的苹果4要额外设置下等等就完了! 屏幕适配框架实现思路: 通过代码获取当前的分辨率 –> ...
- 初步学习nodejs,业余用node写个一个自动创建目录和文件的小脚本,希望对需要的人有所帮助
初步学习nodejs,业余用node写个一个自动创建目录和文件的小脚本,希望对需要的人有所帮助,如果有bug或者更好的优化方案,也请批评与指正,谢谢,代码如下: var fs = require('f ...
随机推荐
- requestAnimationFrame 兼容不支持时的问题
(function() { var lastTime = 0; var vendors = ['ms', 'moz', 'webkit', 'o']; for (var x = 0; x < v ...
- 每天一个linux命令:【转载】head命令
head 与 tail 就像它的名字一样的浅显易懂,它是用来显示开头或结尾某个数量的文字区块,head 用来显示档案的开头至标准输出中,而 tail 想当然尔就是看档案的结尾. 1.命令格式: hea ...
- Windows 10 自带那么多图标,去哪里找呢?
无意间发现我的 D 盘根目录中大部分的文件夹都是系统专用文件夹,有自己的独特图标,偶有一两个开发用的文件夹是默认图标.于是想把它们改成独特样式,而且是 Windows 10 那些新图标样式! 这是我的 ...
- selenium数据驱动
Selenium最后一个知识点——数据驱动.学会了这个Selenium就算学完啦~ 看代码: 这是修改的testSell.py文件. # coding: utf-8 import ddtimport ...
- Python函数 hash()
hash(object) hash() 用于获取取一个对象(字符串或者数值等)的哈希值.返回对象的哈希值. 实例: >>>hash('test') # 字符串 2314058 ...
- 单机数据库优化的一些实践(mysql)
数据库优化有很多可以讲,按照支撑的数据量来分可以分为两个阶段:单机数据库和分库分表,前者一般可以支撑500W或者10G以内的数据,超过这个值则需要考虑分库分表.另外,一般大企业面试往往会从单机数据库问 ...
- Oracle分组函数实例
分组函数也叫聚合函数.如果在查询只想要查分组函数,那么跟平时的查询语句并无不同: SQL ,,,,) ; SUM(T.PRIZENUM) AVG(T.PRIZENUM) --------------- ...
- autoreconf报错LC_ALL和LANGUAGE未设置
报错提示: merlin@ubuntu:/opt/smbshared/projects/x86test/openvpn/openvpn-release-2.4$ autoreconf -i -v -f ...
- Face detection in color images, 彩色图像中的人脸检测
人脸检测在视频监督,人机交互,人脸识别和人脸图像数据库管理等应用领域处于很重要的地位. 论文<Face detection in color images>中给出一种在YCbCr空间检测人 ...
- 将新浪博客里的表情包存入MySQL数据库不完整版本一堆可能用到的散乱代码
header = {'Cookie': 'SINAGLOBAL=7368591819178.463.1491810091070; ALF=1558832450; SCF=Ajrc1sxuwynVIu_ ...