shell expect
关键的action
spawn 调用要执行的命令
expect 捕捉用户输入的提示
send 发送需要交互的值,替代了用户手动输入内容
set 设置变量值
interact 执行完成后保持交互状态,把控制权交给控制台
expect eof 这个一定要加,与spawn对应表示捕获终端输出信息终止,类似于if....endif
expect脚本必须以interact或expect eof结束,执行自动化任务通常expect eof就够了。
set timeout -1 设置expect永不超时
set timeout 300 设置expect 300秒超时,如果超过300没有expect内容出现,则推出
实例一:部署简单的apache,部署的脚本事先写好,expect先登录主机在远程scp到脚本本地,执行脚本
#!/usr/bin/expect
set ip [lindex $argv 0] #注意:$argv 0 是第一个参数,不是脚本名
set name [lindex $argv 1]
#三种情况:直接输密码;
#从未登录远程的主机,需要输入yes确认
#远程主机不可达
spawn ssh root@$ip
expect "(yes/no)?" {
send "yes\r"
expect "password:"
send "redhat\r"
} "password:" {send "redhat\r"} "* host" {exit 1}
#注意每个expect的情况,中间一定有个空格
expect "#"
#scp apache的部署脚本
send "scp root@172.25.12.250:/home/wxl/Desktop/shell/apache.sh /mnt\n"
expect "(yes/no)?" {
send "yes\r"
expect "password:"
send "redat\r"
} "password:" { send "redhat \r" }
expect "#"
send "sh /mnt/apache.sh $name;exit\r"
expect eof #结束标志,关闭对话
foreach的用法:相当于数组这么个概念。为数组中的每个元素都执行下面动作
实例二:
[root@server1 note]# cat sshv.sh
#!/usr/bin/expect
foreach ip {
192.168.88.121
192.168.88.123
} {
spawn ssh root@$ip
expect "(yes/no)?" {
send "yes\r"
expect "password:"
send "redhat\r"
} "password:" {send "redhat\r"} "* host" {exit 1}
expect "#"
send "hostname;exit\r"
expect eof
}
shell脚本和expect的结合:但是expect脚本里最好指定解释器
实例三:从文件中读取账户密码,expect自动登录,进行操作;
shell程序:
#!/bin/bash
for ip in `awk '{print $1}' passwd.txt`
do
pass=`awk -v i="$ip" '{if(i==$1)print $2}' passwd.txt`
#-v设定变量, 如果当前行的$1就是ip和所设定的变量ip(原来的$1)
#那么就取出$2(密码)
expect vssh.sh $ip $pass
done
expect程序:
和实例一差不多。
pass.txt:
172.25.12.11 redhat
172.25.254.18 centos
shell expect的更多相关文章
- shell expect的简单用法【转】
用expect实现自动登录的脚本,网上有很多,可是都没有一个明白的说明,初学者一般都是照抄.收藏.可是为什么要这么写却不知其然.本文用一个最短的例子说明脚本的原理. 脚本代码如下: ######## ...
- shell expect权威指南和实战
一.概述 我们通过Shell可以实现简单的控制流功能,如:循环.判断等.但是对于需要交互的场合则必须通过人工来干预,有时候我们可能会需要实现和交互程序如telnet服务器等进行交互的功能.而expec ...
- 【转】shell expect spawn、linux expect 用法小记 看着舒服点
使用expect实现自动登录的脚本,网上有很多,可是都没有一个明白的说明,初学者一般都是照抄.收藏.可是为什么要这么写却不知其然.本文用一个最短的例子说明脚本的原理. 脚本代码如下: ######## ...
- 初识shell expect
场景:工作中经常会遇到shell脚本写的连接脚本,所以稍微了解下. 一.shell Shell 是一个用C语言编写的程序,它是用户使用Linux的桥梁.Shell既是一种命令语言,又是一种程序设计语言 ...
- shell expect的简单实用
一.在shell脚本中嵌入expect来实现密码输入 expect是一个自动交互功能的工具.expect是开了一个子进程,通过spawn来执行shell脚本,监测到脚本的返回结果,通过expect判断 ...
- 简单shell expect程序
1 expect程序 用的Ubuntu,本身没带expect,安装. sudo apt-get install expect (关于expect,参见http://www.tclchina.com/a ...
- centos下使用shell+expect远程登录主机
# 安装expect yum install expect # 新建脚本文件running #!/usr/bin/expect spawn /usr/bin/ssh root@114.114.114. ...
- shell与expect结合使用
在linux操作系统下,使用脚本自动化,一般由两种方案,方案一:telnet+ftp,方案二:ssh+scp+expect. 以下主要使用ssh+scp+expect为例进行说明使用方式. 第一步:安 ...
- linux - 怎么自动填写有交互的shell脚本 - SegmentFault
linux - 怎么自动填写有交互的shell脚本 - SegmentFault TCL/Expect交互式自动化测试概要 - - ITeye技术网站 expect是一种基于TCL,能与交互式程序进行 ...
随机推荐
- JOptionPane常用提示框
//JOptionPane.showMessageDialog(parentComponent, message, title, messageType, icon); JOptionPane.sho ...
- min-width 和 @media screen
min-width可以容器设置最小宽度,低于改宽度时,会自动加上滚动条,支持ie7及ie7+: @media only screen and (min-width: /*最小宽度(要加单位px)*/) ...
- 2款JS脚本判断手机浏览器跳转WAP手机网站
随着移动设备的普及,企业的网络宣传已经不能局限在PC端,而需要同时在移动端有所建树.对于公司网站来说,以前都是做的PC端的,当然手机等移动端也可以访问,但是用户体验肯定不如完全适合的手机端来的方便.我 ...
- Pyhton:List build-in function
列表是Python中的可迭代对象之一,在讲列表的内建函数之前我们可以自己在IDE上看看都有那些内建函数,我们可以在pycharm中使用代码及其运行结果如下: print(dir(list)) ['__ ...
- hdu 1027 Ignatius and the Princess II(产生第m大的排列,next_permutation函数)
题意:产生第m大的排列 思路:使用 next_permutation函数(头文件algorithm) #include<iostream> #include<stdio.h> ...
- wukong引擎源码分析之索引——part 1 倒排列表本质是有序数组存储
searcher.IndexDocument(0, types.DocumentIndexData{Content: "此次百度收购将成中国互联网最大并购"}) engine.go ...
- QTextEdit/QPlainTextEdit添加文字超出视图后,滚动条自动移至最底部
void ThreadExit::onTaskPerformState(const QString& strStatus) { //追加文本(ui.taskStatusTextEdit是一个Q ...
- 获取指定类型如枚举/属性上自定义attribue值
有时候我们用数字来区分一些类型,如1:中国银行,2:建设银行,3:工商银行,…….这时候我在代码中通常会定义枚举来与定义的一一对应,并在该枚举值上设置特性来表示所代表的含义,这样避免多处写一些数字来标 ...
- [NOIP 2018 Day1] 简要题解
[题目链接] 铺设道路 : https://www.luogu.org/problemnew/show/P5019 货币系统 : https://www.luogu.org/problemnew/sh ...
- [POI2007] 大都市
[题目链接] https://www.lydsy.com/JudgeOnline/problem.php?id=1103 [算法] 树链剖分 时间复杂度 : O(NlogN ^ 2) [代码] #in ...