关键的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的更多相关文章

  1. shell expect的简单用法【转】

    用expect实现自动登录的脚本,网上有很多,可是都没有一个明白的说明,初学者一般都是照抄.收藏.可是为什么要这么写却不知其然.本文用一个最短的例子说明脚本的原理. 脚本代码如下:  ######## ...

  2. shell expect权威指南和实战

    一.概述 我们通过Shell可以实现简单的控制流功能,如:循环.判断等.但是对于需要交互的场合则必须通过人工来干预,有时候我们可能会需要实现和交互程序如telnet服务器等进行交互的功能.而expec ...

  3. 【转】shell expect spawn、linux expect 用法小记 看着舒服点

    使用expect实现自动登录的脚本,网上有很多,可是都没有一个明白的说明,初学者一般都是照抄.收藏.可是为什么要这么写却不知其然.本文用一个最短的例子说明脚本的原理. 脚本代码如下: ######## ...

  4. 初识shell expect

    场景:工作中经常会遇到shell脚本写的连接脚本,所以稍微了解下. 一.shell Shell 是一个用C语言编写的程序,它是用户使用Linux的桥梁.Shell既是一种命令语言,又是一种程序设计语言 ...

  5. shell expect的简单实用

    一.在shell脚本中嵌入expect来实现密码输入 expect是一个自动交互功能的工具.expect是开了一个子进程,通过spawn来执行shell脚本,监测到脚本的返回结果,通过expect判断 ...

  6. 简单shell expect程序

    1 expect程序 用的Ubuntu,本身没带expect,安装. sudo apt-get install expect (关于expect,参见http://www.tclchina.com/a ...

  7. centos下使用shell+expect远程登录主机

    # 安装expect yum install expect # 新建脚本文件running #!/usr/bin/expect spawn /usr/bin/ssh root@114.114.114. ...

  8. shell与expect结合使用

    在linux操作系统下,使用脚本自动化,一般由两种方案,方案一:telnet+ftp,方案二:ssh+scp+expect. 以下主要使用ssh+scp+expect为例进行说明使用方式. 第一步:安 ...

  9. linux - 怎么自动填写有交互的shell脚本 - SegmentFault

    linux - 怎么自动填写有交互的shell脚本 - SegmentFault TCL/Expect交互式自动化测试概要 - - ITeye技术网站 expect是一种基于TCL,能与交互式程序进行 ...

随机推荐

  1. GPG key

    Creating GPG Keys - Fedora Project Wiki https://fedoraproject.org/wiki/Creating_GPG_Keys

  2. Spark SQL is a Spark module for structured data processing.

    http://spark.apache.org/docs/latest/sql-programming-guide.html

  3. CH 5102 Mobile Service(线性DP)

    CH 5102 Mobile Service \(solution:\) 这道题很容易想到DP,因为题目里已经说了要按顺序完成这些请求.所以我们可以线性DP,但是这一题的状态不是很好设,因为数据范围有 ...

  4. [译]Flutter JSON和序列化

    [译]Flutter JSON和序列化   很难想象一个移动应用程序不需要与Web服务器通信或在某些时候容易存储结构化数据.制作网络连接的应用程序时,迟早需要消耗一些好的旧JSON. 本指南介绍了如何 ...

  5. <转载>调制与解调电路详解

    原文链接:http://www.elecfans.com/analog/20120509270848_4.html 调幅和检波电路 广播和无线电通信是利用调制技术把低频声音信号加到高频信号上发射出去的 ...

  6. Hihocoder 之 #1097 : 最小生成树一·Prim算法 (用vector二维 模拟邻接表,进行prim()生成树算法, *【模板】)

    #1097 : 最小生成树一·Prim算法 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 最近,小Hi很喜欢玩的一款游戏模拟城市开放出了新Mod,在这个Mod中,玩家可 ...

  7. HDU1569 方格取数(2) —— 二分图点带权最大独立集、最小割最大流

    题目链接:https://vjudge.net/problem/HDU-1569 方格取数(2) Time Limit: 10000/5000 MS (Java/Others)    Memory L ...

  8. 【JSOI 2014】序列维护

    [题目链接] 点击打开链接 [算法] 线段树 注意标记下传 [代码] #include<bits/stdc++.h> using namespace std; #define MAXN 5 ...

  9. 微信小程序在线制作 自己制作微信小程序

    小程序是个什么东西?怎么自己制作微信小程序?微信小程序在线制作难吗?最近老是听这类问题,耳朵都长茧子了. 百牛信息技术bainiu.ltd整理发布于博客园 接下来作为一个技术人员的角度就为大家分析一下 ...

  10. pl/sql 远程连接oracl服务器方法

    在Oracle/network/admin中的tnsnames.ora中添加对应的如下代码: LISTENER_ORCL = (DESCRIPTION = (ADDRESS = (PROTOCOL = ...