下载安卓APP箭头
箭头给我发消息

客服QQ:3315713922

Linux下的Expect

作者:课课家教育     来源: http://www.kokojia.com点击数:943发布时间: 2019-03-07 10:34:49

标签: ExpectlinuxTcl

大神带你学编程,欢迎选课

  Shell可以实现简单的控制流程,如:循环、判断等。但是对于需要交互的场合必须通过人工来干预,有时候需要实现和交互程序telnet服务器等进行交互的功能。而Expect的出现就是来实现这种功能的工具。

  一、概念

  Expect是一个免费的编程工具语言,用来实现自动和交互式任务进行通信,而无需人的干预。Expect的作者Don Linbes对Expect有如下的定义:Expect是一个用来实现自动交互功能的软件套件。使用它的系统管理员可以创建脚本用来实现对命令或程序提供输入,而这些命令和程序是期望从终端得到输入,一般来说这些输入都需要手工输入进行的。Expect则可以根据程序的提示模拟标准输入提供给程序需要的输入来实现交互程序执行。甚至可以实现简单的BBS聊天机器人。

  Expect是不断发展的,随着时间的流逝,其功能越来越强大,已经成为系统管理员的的一个强大助手。Expect需要Tcl编程语言的支持,要在系统上运行Expect必须首先安装Tcl。

  二、Linux Expect安装

  Expect是在Tcl基础上创建起来的,它还提供了一些Tcl所没有的命令,它可以用来做一些linux下无法做到交互的一些命令操作,在远程管 理方面发挥很大的作用。 spawn命令激活一个Unix程序来进行交互式的运行。send命令向进程发送字符串。 expect 命令等待进程的某些字符串。expect支持正规表达式并能同时等待多个字符串,并对每一个字符串执行不同的操作。

Linux下的Expect_Expect_linux_Tcl_课课家教育

  安装完毕以后,进入tcl源代码的根目录,把子目录unix下面的tclUnixPort.h copy到子目录generic中。 暂时不要删除tcl源代码,因为expect的安装过程还需要用。

  三、自动切换登陆用户的脚本与执行

  如何能够将输入密码的工作在shell里面自动完成,研究发现这种交互式的工作,普通的shell实现不了,据说可以借助Expect来搞定:

  例子:

  附注:

  对于 *NIX 系统而言,每一条命令,不管是内置的,SHELL 函数还是外置的,当它退出时,都 会返回一个小整数给引用它的程序,这就是程序退出状态 ( exit status ).

  一般来讲,退出状态 0 表示正常执行,没有遭遇任何问题。其他非零的状态码均表示失败。

  在 shell 中,可以使用 $? 来访问最后一个程序的退出状态。

  下面是 POSIX 的结束状态:

  退出状态码 含义

  0 命令成功退出

  > 0 在重定向或者单词展开期间(~、变量、命令、算术展开以及单词切割)失败。

  1 – 125 命令不成功退出。特定的退出值的含义,有各个命令自行定义。

  126 命令找到了,但是文件无法执行。

  127 命令没有找到

  > 128 命令因收到信号而死亡。

  POSIX 没有定义 128 的状态码,仅要求它表示某种错误。因为只有低位的 8 个位会返回给父进程,因此,所有大于 255 的退出状态都会被对 256 取模,然后将其结果作为实际的 exit status code.

  在 shell 脚本中,可以使用 exit integer_value 这种方式声明退出状态。如果没有显式地声明,则会以最后一个程序的退出状态作为当前脚本的退出状态。也可以使用 exit $? 来表示。

  Expect 的默认Exit value为0: exit 等价于 exit 0 因此,当expect中执行了子命令时(如shell命令),要想在Expect退出时得到子命令的退出状态,就需要再Exepect退出时对exit value重新赋值。

  四、Expect工作原理

  从最简单的层次来说,Expect的工作方式象一个通用化的Chat脚本工具。Chat脚本最早用于UUCP网络内,以用来实现计算机之间需要建立连接时进行特定的登录会话的自动化

  Chat脚本由一系列expect-send对组成:expect等待输出中输出特定的字符,通常是一个提示符,然后发送特定的响应。例如下面的 Chat脚本实现等待标准输出出现Login:字符串,然后发送somebody作为用户名;然后等待Password:提示符,并发出响应 sillyme。

  引用:Login: somebody Password: sillyme

  这个脚本用来实现一个登录过程,并用特定的用户名和密码实现登录。Expect最简单的脚本操作模式本质上和Chat脚本工作模式是一样的。

  以上就是关于Linux下使用Expect的介绍,希望本文的内容对您的学习有帮助,如有疑问欢迎登陆课课家教育留言交流!

赞(19)
踩(0)
分享到:
华为认证网络工程师 HCIE直播课视频教程