`

expect脚本

 
阅读更多

#! /usr/bin/expect -f

set timeout 3

spawn sudo apt-get install rake

expect "*sudo] password*"

send "123456\r"

expect "*@ubuntu-Box:~$*"

spawn sudo apt-get install htop

expect "*sudo] password*"

send "123456\r"

interact

 

文件名:ev.expect   终端下执行:./ev.expect

 

================================================

 

1。首先确认expect的包要安置。

[[zhuying@SOR_SYS opt]$ rpm -qa | grep expect

如果没有则需要下载安装,我安装的是expect-5.42.1-1.x86_64.rpm和expect-devel-5.42.1-1.x86_64.rpm

安装过后会显示:

[[zhuying@SOR_SYS opt]$ rpm -qa | grep expect

expect-5.43.0-5.1

expect-devel-5.42.1-1

2.查看expect的路径,可以用

[zhuying@SOR_SYS opt]$ which expect

/usr/bin/expect

[zhuying@SOR_SYS opt]$ view autosu.sh

3。确定脚本有可执行权限

chmod +x autosu.sh

#!/usr/bin/expect -f//这个expect的路径就是用which expect 查看的结果

spawn su - oracle //切换用户 

expect "password:" //提示让输入密码 

send "99billzy \r"//输入oracle的密码 

interact //操作完成

这在root用户切换到oracle用户的时候特别的快,但是在其他用户切换到oracle的时候则需要等待一段时间!

另外需要注意的是:

不能按照习惯来用sh autosu.sh 来这行expect的程序,会提示找不到命令,如下:

autosu.sh: line 3: spawn: command not found

couldn't read file "password:": no such file or directory

autosu.sh: line 5: send: command not found

autosu.sh: line 6: interact: command not found

因为expect用的不是bash所以会报错。执行的时候直接./autosu.sh 就可以了。~切记!

 

来自:http://tomhibolu.iteye.com/blog/1214769

 

用的Ubuntu,本身没带expect,安装。

  sudo apt-get install expect

 

 

 

2 写脚本 sample.script

 

   下面是简单的一个例子,把登录名和密码都显式地写在脚本里。

#!/usr/bin/expect -f    

#auto ssh login    

  

set  timeout 20  

spawn ssh login_name@host_name  

expect “*password:”   

send “123456/r”   

interact  

      上面的脚本中,spawn命令激活一个Unix程序来进行交互式的运行。send命令向进程发送字符串。expect命令等待进程的某些字符串。 expect支持正规表达式并能同时等待多个字符串,并对每一个字符串执行不同的操作。expect还能理解一些特殊情况,如超时和遇到文件尾。

 

   如果希望脚本有一定的通用性,比如通过参数方式来输入用户名和主机地址。那么脚本可以象这样:

#!/usr/bin/expect -f     

#auto ssh login     

    

set  timeout 20    

   

set  login_name [lindex $argv 0]  

set  host_name [lindex $argv 1]    

   

spawn ssh $login_name@$host_name    

        

expect “*password:”    

   

send “123456/r”    

   

interact    

 

   这样执行的时候$argv 0 就是输入的第一个参数, $argv 1 就是输入的第二个参数

 

3  给脚本加上可执行权限

 

   chmod +x sample.script

 

   如果文件默认有其它权限,建议最好设置为只能自己读取,修改和执行

   chmod 700 sample.script

   接着就可以通过执行脚本进行远程登录了 ./sample.script

 

=====================================================

管理员往往有这样的需求,希望根据当前的具体情况来以不同的方式对一个命令进行响应。我们可以通过后面的例子看到expect可以实现非常复杂的条件响应,而仅仅通过简单的修改预处理脚本就可以实现。下面的例子是一个更复杂的expect-send例子:

  expect -re "\[(.*)]:"

  if {$expect_out(1,string)!="/bin/tcsh"} {

  send "/bin/tcsh" }

  send " "

  expect eof

  在这个例子中,第一个expect命令现在使用了-re参数,这个参数表示指定的的字符串是一个正则表达式,而不是一个普通的字符串。对于上面 这 个例子里是查找一个左方括号字符(其必须进行三次逃逸(escape),因此有三个符号,因为它对于expect和正则表达时来说都是特殊字符)后面跟有 零个或多个字符,最后是一个右方括号字符。这里.*表示表示一个或多个任意字符,将其存放在()中是因为将匹配结果存放在一个变量中以实现随后的对匹配结 果的访问。

  当发现一个匹配则检查包含在[]中的字符串,查看是否为/bin/tcsh。如果不是则发送/bin/tcsh给chsh命令作为输入,如果是则仅仅发送一个回车符。这个简单的针对具体情况发出不同相响应的小例子说明了expect的强大功能。

  在一个正则表达时中,可以在()中包含若干个部分并通过expect_out数组访问它们。各个部分在表达式中从左到右进行编码,从1开始(0包含有整个匹配输出)。()可能会出现嵌套情况,这这种情况下编码从最内层到最外层来进行的。

 

分享到:
评论

相关推荐

    expect 脚本的简单例子

    关于自动化脚本expect的一个例子。本脚本功能是 实现自动输入密码登录到一个server机器上。

    expect脚本学习教程与范例

    ### Expect脚本学习教程与范例 #### 一、Expect简介及应用场景 **Expect** 是一个免费且强大的编程工具,主要用于实现自动化与交互式的任务处理,尤其适用于那些原本需要人工干预的任务。它允许用户创建脚本来自动...

    14.Shell脚本编程之expect.md

    通过使用 Expect,可以将原本需要手动进行的操作,例如 SSH 登录、FTP 登录等,编写成脚本自动执行。这在需要对多台服务器执行相同操作的场景下尤其有用,能够显著提高系统管理员的工作效率。 ### 2. 安装 Expect ...

    Tcl语言,expect脚本

    ### Tcl语言与Expect脚本详解 #### 一、Tcl语言概述 Tcl(发音为“tickle”),全称为Tool Command Language(工具命令语言),是一种简单易学且具有高度可扩展性的脚本语言。Tcl的核心优势在于其简洁的语法和强大...

    expect window版本

    "Expect Window 版本"指的是将 Expect 脚本语言集成到 Windows 操作系统中的工具。Expect 是一种用于自动化交互式应用程序的脚本语言,它最初是为类 Unix 系统设计的,但通过特定的版本或实现,也能在 Windows 下...

    Linux经典脚本expect的示例及基本用法

    通过本文,我们了解了expect这一强大工具的基本概念、工作原理及其应用场景,并通过一个具体的示例深入了解了expect脚本的编写方法。expect不仅能够极大地提高系统的运维效率,还能够降低人为错误的风险,是Linux...

    expect脚本安装和一个简单的脚本

    Expect脚本安装和简单脚本示例 Expect脚本是一种强大的自动交互工具,它可以模拟用户的交互行为,自动输入密码、命令等,从而实现自动化任务。下面是 Expect 脚本的安装和简单脚本示例。 Expect 脚本安装 --------...

    linux-expect模拟键盘输入实现定时登录教程.zip

    打开crontab配置文件(`crontab -e`),添加一条定时任务,例如每天凌晨3点运行expect脚本: ```bash 0 3 * * * /path/to/your/login_script.sh ``` 记得替换`/path/to/your/login_script.sh`为你的expect脚本实际...

    expect脚本编程

    ### Expect脚本编程知识点 #### 一、摘 要 Expect是一种自动化交互式脚本语言,主要用于控制基于文本的应用程序(例如telnet会话、ssh登录等)。它使用Tcl语言作为其基础,能够自动地模拟用户输入,并处理应用程序...

    Linux中使用expect脚本实现远程机器自动登录

    为了解决这个问题,我们可以利用expect脚本实现自动化登录,提高工作效率。Expect是Tcl语言的一个扩展,它允许我们编写能够与交互式程序进行对话的脚本。在这篇文章中,我们将详细介绍如何在Linux中使用expect脚本来...

    Expect简介及应用,是一种能够强大的脚本语言

    - **解决方案:** 编写Expect脚本,利用脚本中的循环结构,实现文件的批量传输。 ##### 2. **远程系统管理** - **背景:** 网络管理员需要定期登录多台服务器进行检查或更新配置。 - **解决方案:** 使用Expect...

    交互试软件的脚本

    《使用 Expect 脚本实现自动化交互操作》 在 IT 领域,尤其是在系统管理和自动化运维中,Expect 是一个非常实用的工具。 Expect 软件允许编写脚本模拟用户与命令行程序的交互,尤其适用于那些需要输入密码、等待...

    远程批量修改linux服务器密码的脚本归类.pdf

    1. Expect 脚本的使用:Expect 是一个非常强大的工具,可以用来自动化交互式的 shell 会话。在本文档中,我们使用 Expect 来实现批量修改 Linux 服务器的密码。 2. SSH 的使用:SSH(Secure Shell)是一种安全的...

    expect正则表达式简介

    本人关于expect正则表达式应用的一点总结,因为去翻exploring expect比较费劲,就把正则表达式这常用的内容总结一下记在这了。

    在Linux下灵活使用expect脚本的小窍门

    本文将探讨几个利用expect脚本实现自动化操作的小窍门,帮助你更高效地运用这个工具。 1. 使用`-c`选项执行expect脚本 当你需要快速运行一段简单的expect命令时,可以使用`-c`选项直接在命令行中执行。例如: ```...

    scp复制远程服务器文件至本地服务器expect脚本

    该脚本需要配合java代码一起使用的哈,教程地址:...

    scp复制远程服务器文件夹至本地服务器expect脚本

    该脚本需要配合java代码一起使用的哈,教程地址:...

    expect安装包以及部署文档

    通过编写expect脚本,运维人员可以将繁琐的重复工作自动化,显著提高工作效率。 首先,我们需要获取并安装expect的环境。在这个压缩包中,包含了tcl8.4.11-src.tar.gz和expect-5.43.0.tar.gz两个源码包。tcl是...

    RHEL 7.8安装expect及使用.docx

    Chat 脚本由一系列 expect-send 对组成:expect 等待输出中输出特定的字符,通常是一个提示符,然后发送特定的响应。 3. 安装 Expect Expect 需要 Tcl 编程语言的支持,要在系统上运行 Expect 必须首先安装 Tcl。...

    expect英文版简略教程

    本文的核心是介绍了一款名为Autoexpect的工具,它能够通过观察实际的人机交互过程来自动生成Expect脚本,从而使用户无需了解Expect语言的具体语法就能完成自动化任务。 #### 二、Autoexpect:一种新的自动化方式 ...

Global site tag (gtag.js) - Google Analytics