expect实现免交互
如果想写一个能够自动处理输入输出的脚本又不想面对C或Perl,那么expect是最好的选择。它可以用来做一些Linux下无法做到交互的一些命令操作。
(1).安装和使用expect
expect是不会自动安装的所以需要使用命令进行安装,这里使用yum即可:
[root@xuexi ~]# yum -y install expect
在脚本中使用expect的方法一般有两种:
第一种、定义脚本执行的shell时,定义为expect。即脚本第一行为#!/bin/expect或#!/usr/bin/expect;
第二种、在shell脚本中使用时,可以使用一组/usr/bin/expect<<EOF和EOF来对expect调用。
(2).expect中参数和语法说明
set [变量名] "[String]"
在expect脚本中设置变量需要在前面使用set,否则无法使用。
set timeout 30
设置超时时间,单位为秒,如果设为timeout -1则永不超时。
spawn
spawn是进入expect环境后才能执行的内部命令,如果没有安装expect或直接在默认shell下执行是找不到spawn命令的。它主要的功能是开启脚本和命令之间的会话。(后面跟随的命令必须是需要交互的,因为expect脚本是用来做交互应用的)
expect
这里的expect同样是expect的内部命令。主要功能是判断输出结果是否包含某项关键字,没有则立即返回,否则等待一段时间后返回,等待时间通过set timeout进行设置。有两种写法:
expect{
"[String1]" {send "[sendString1]\r";exp_continue}
"[String2]" {send "[sendString2]\r";exp_continue}
...
"[StringN]" {send "[sendStringN]\r"}
}
或
expect "String"
send "sendString1\r"
sned "sendString2\r"
...
expect eof
send
执行交互动作,将交互要执行的动作输入。命令字符串结尾要加上"\r",如果出现异常等待状态可以进行核查
exp_continue
继续执行接下来的交互操作
interact
执行完后保持交互状态,把控制权交给控制台;如果没有这一项,交互完成后会自动退出
$argv
expect脚本可以接受从bash传递过来的参数,可以使用[Iindex $argv n]获得,n从0开始表示第一个参数。
注意:spawn开启会话,expect和send进行交互。
(3).脚本实例
1)expect脚本实现ssh免交互
[root@xuexi ~]# cat ssh-6.exp
#!/bin/expect
set ipaddr "192.168.1.6"
set name "root"
set passwd "123456"
set timeout 30
spawn ssh $name@$ipaddr
expect "password"
send "$passwd\r"
expect eof
expect "#"
send "ls /etc/ >> /root/1.txt\r"
send "exit\r"
expect eof
[root@xuexi ~]# expect ssh-6.exp
spawn ssh root@192.168.1.6
root@192.168.1.6's password:
Last login: Sat May 11 18:24:27 2019 from xuexi
[root@youxi1 ~]# ls /etc/ >> /root/1.txt
[root@youxi1 ~]# exit
登出
Connection to 192.168.1.6 closed.
在192.168.1.6上可以看到生成了/root/1.txt
2)shell脚本实现免交互
[root@xuexi ~]# cat ssh-6.sh
#!/bin/bash name="root"
passwd="123456"
ipaddr="192.168.1.6" /bin/expect << EOF
set timeout 30
spawn ssh $name@$ipaddr
expect "password"
send "$passwd\r"
expect eof
expect "#"
send "ls /etc/ >> /root/2.txt\r"
send "exit\r"
expect eof
EOF
[root@xuexi ~]# sh ssh-6.sh
spawn ssh root@192.168.1.6
root@192.168.1.6's password:
Last login: Sat May 11 19:21:18 2019 from xuexi
[root@youxi1 ~]# ls /etc/ >> /root/2.txt
[root@youxi1 ~]# exit
登出
Connection to 192.168.1.6 closed.
在192.168.1.6上可以看到生成了/root/2.txt
expect实现免交互的更多相关文章
- linux免交互登陆远程主机并执行命令(密钥对和Expect)
原文章摘自:http://lizhenliang.blog.51cto.com/7876557/1607723/ Linux下实现免交互登陆一般有两种: 1. SSH无密码认证方式 客户端使用ssh- ...
- expect命令和here document免交互
目录 一.Here Document免交互 1.1 概述 1.2 语法格式 1.3 简单案例 1.4 支持变量替换 1.5 多行注释 1.6 完成自动划分磁盘免交互 二.Expect进行免交互 2.1 ...
- expect--脚本实现免交互命令
转自:http://blog.51cto.com/lizhenliang/1607723 注意:使用expect脚本时,需要把脚本添加执行权限,然后./test.sh直接执行,不能用sh或者sourc ...
- Shell 编程 免交互 expect
本篇主要写一些shell脚本免交互expect的使用. 概述 Expect是建立在tcl基础上的一个工具,Expect 是用来进行自动化控制和测试的工具.主要解决shell脚本中不可交互的问题. 安装 ...
- expect免交互用法
一.ssh免交互远程连接linux服务器 ssh在远程连接linux系统时,会有交互,比如输入yes/no,或者需要输入密码.我们怎么避免这些交互呢!比如我们可以用telnet远程登录交换机,去备份交 ...
- shell中expect免交互
expect前言观察ssh登录的交互现象有些程序难以避免的需要交互.你该如何解决脚本与程序的交互问题?名词解释期待, 预期, 盼望, 预料,料想, 指望, 希望, 要求,想, 认为一.概述 我们通过S ...
- ssh 免交互登录 ,远程执行命令脚本。
##免交互SSH登录auto_login_ssh () { expect -c "set timeout -1; spawn -noecho ssh -o ...
- Shell批量SSH免交互登录认证
脚本实现功能:批量或单个SSH免交互登录认证 脚本应用场景:当部署集群时,大多数实现要配置好管理节点与从节点的SSH免交互登录,针对这样的情况,写了下面脚本,简化工作. 脚本支持系统:Ubuntu和C ...
- shell免交互
目录 一.Here Document免交互 1.1.Here Document概述 1.2.注意事项 1.3.免交互示例 wc -l实现对行数的统计 read命令接收输入并打印 passwd给用户设置 ...
随机推荐
- Sonya and Exhibition
http://codeforces.com/group/1EzrFFyOc0/contest/1004/problem/B #include<iostream> #include<c ...
- java之jvm
1.JVM内存模型 线程独占:栈,本地方法栈,程序计数器线程共享:堆,方法区 回答以上问题是需回答两个要点:1. 各部分功能2. 是否是线程共享 2.JMM与内存可见性JMM是定义程序中变量的访问规则 ...
- vimrc config and NERDTree
nmap <C-N> :tabnext<CR> 下载和配置 NERDTree插件的官方地址如下,可以从这里获取最新的版本 https://github.com/scrooloo ...
- Windows启动报错:无效的分区表 解决方法,哈哈
Windows系统启动时出现Invalid Partition Table错误 2018-07-27 16:32 今天KB小网管跟大家分享一个在重装Windows系统时会出现的一个问题Invalid ...
- MySQL中的with rollup的作用
个人理解: 文字性理解 ---> 大分组 group by 之后 在进行组内汇总with rollup.下面的例子我觉得写的不错,理解也很容易. 例子: 转 http://www.cnblog ...
- Codeforces Round #554 (Div. 2) F2. Neko Rules the Catniverse (Large Version) (矩阵快速幂 状压DP)
题意 有nnn个点,每个点只能走到编号在[1,min(n+m,1)][1,min(n+m,1)][1,min(n+m,1)]范围内的点.求路径长度恰好为kkk的简单路径(一个点最多走一次)数. 1≤n ...
- 6、获取Class中的方法
6.获取Class中的方法 6.1 getMethods() 获取的都是共有的方法(包括父类) 返回包含一个数组 方法对象反射由此表示的类或接口的所有公共方法 类对象,包括那些由类或接口和那些从超类和 ...
- jQuery.extend([deep], target, object1, [objectN])
jQuery.extend([deep], target, object1, [objectN]) 概述 用一个或多个其他对象来扩展一个对象,返回被扩展的对象.直线电机 如果不指定target,则给j ...
- percona-toolkit 主从工具 master-slave
复制类 pt-heartbeat 监控mysql复制延迟 pt-slave-delay 设定从落后主的时间 pt-slave-find 查找和打印所有mysql复制层级关系 pt-slav ...
- vue 中 v-model
一.v-model: 先上段简单的 vue 代码: // 定义 v-model 示例组件 Vue.component('bindData', { template:` <div> < ...