linux expect 简单讲解

来自http://blog.csdn.net/winstary/archive/2009/08/08/4422156.aspx
使用expect实现自动登录的脚本,网上有很多,可是都没有一个明白的说明,初学者一般都是照抄、收藏。可是为什么要这么写却不知其然。本文用一个最短的例子说明脚本的原理。
脚本代码如下:

#!/usr/bin/expect

settimeout30

spawnssh-lusername192.168.1.1

expect"password:"

send"ispass\r"

interact

##############################################

1.[#!/usr/bin/expect]

这一行告诉操作系统脚本里的代码使用那一个shell来执行。这里的expect其实和linux下的bash、windows下的cmd是一类东西。

注意:这一行需要在脚本的第一行。

2.[settimeout30]

基本上认识英文的都知道这是设置超时时间的,现在你只要记住他的计时单位是:秒

3.[spawnssh-lusername192.168.1.1]

spawn是进入expect环境后才可以执行的expect内部命令,如果没有装expect或者直接在默认的SHELL下执行是找不到spawn命令的。所以不要用“whichspawn“之类的命令去找spawn命令。好比windows里的dir就是一个内部命令,这个命令由shell自带,你无法找到一个dir.com或dir.exe的可执行文件。

它主要的功能是给ssh运行进程加个壳,用来传递交互指令。

4.[expect"password:"]

这里的expect也是expect的一个内部命令,有点晕吧,expect的shell命令和内部命令是一样的,但不是一个功能,习惯就好了。这个命令的意思是判断上次输出结果里是否包含“password:”的字符串,如果有则立即返回,否则就等待一段时间后返回,这里等待时长就是前面设置的30秒

5.[send"ispass\r"]

这里就是执行交互动作,与手工输入密码的动作等效。

温馨提示:命令字符串结尾别忘记加上“\r”,如果出现异常等待的状态可以核查一下。

6.[interact]

执行完成后保持交互状态,把控制权交给控制台,这个时候就可以手工操作了。如果没有这一句登录完成后会退出,而不是留在远程终端上。如果你只是登录过去执行

#!/usr/bin/expect#注意安装的路径,不确定whereisexpect一下

#Changealoginshelltobash

setuser[lindex$argv0]

spawnbash$user

expect"]:"

send"/bin/bash"

expecteof

exit

spawn代表在本地终端执行的语句,在该语句开始执行后,expect开始捕获终端的输出信息,然后做出对应的操作。expect代码中的捕获的(yes/no)内容用于完成第一次访问目标主机时保存密钥的操作。有了这一句,scp的任务减少了中断的情况。代码结尾的expect eof与spawn对应,表示捕获终端输出信息的终止。

时间: 2024-09-29 00:15:50

linux expect 简单讲解的相关文章

linux硬盘分区讲解

在学习 Linux 的过程中,安装 Linux 是每一个初学者的第一个门槛.在这个过程中间,最大的困惑莫过于给硬盘进行分区.虽然,现在各种发行版本的 Linux 已经提供了友好的图形交互界面,但是很多的人还是感觉无从下手.这其中的原因主要是不清楚 Linux 的分区规定,以及它下面最有效的分区工具― Fdisk 的使用方法. 首先我们要对硬盘分区的基本概念进行一些初步的了解,硬盘的分区主要分为基本分区(primary partion)和扩充分区(extension partion)两种,基本分区

矩阵快速幂 模板与简单讲解

模板 快速幂模板 1 void solve(matrix t,long long o) 2 { 3 matrix e; 4 5 memset(e.a,0,sizeof(e.a)); 6 7 for (int i = 0;i < d;i++) 8 e.a[i][i] = 1; 9 10 while (o) 11 { 12 if (o & 1) 13 { 14 e = mul(e,t); 15 } 16 17 o >>= 1; 18 19 t = mul(t,t); 20 } 21

expect简单用法

1 #!/usr/expect/bin/expect -f 2 3 4 set loginuser [lrange $argv 0 0] 5 set loginpass [lrange $argv 1 1] 6 set ipaddr [lrange $argv 2 2] 7 set port [lrange $argv 3 3] 8 set timeout [lrange $argv 4 4] 9 set from [lrange $argv 5 5] 10 set to [lrange $ar

WeX5的简单介绍及UI的简单讲解

WeX5的简单介绍及UI的简单讲解 (2016-01-13 14:49:05) 标签: it 分类: WeX5的初步自学 一.WeX5的简单讲解 1.WeX5是前端快速开发框架,可开发跨端运行应用.是移动App/微信/WebApp开发利器,一次开发多平台运行. 二.WeX5平台了解 1.菜单和工具栏 :查看API:启动Tomcat:搜索:首选项:复位透视图 2.透视图 :导入java项目:使用svn 3.模型资源 :文件对比 :新建.复制.删除:重命名文刷件新及文件夹:模型编译 切换到资源管理器

Linux shell ${}简单用法

转自:Linux shell ${}简单用法 为了完整起见,我这里再用一些例子加以说明 ${ } 的一些特异功能:假设我们定义了一个变量为:file=/dir1/dir2/dir3/my.file.txt我们可以用 ${ } 分别替换获得不同的值:${file#*/}:拿掉第一条 / 及其左边的字符串:dir1/dir2/dir3/my.file.txt${file##*/}:拿掉最后一条 / 及其左边的字符串:my.file.txt${file#*.}:拿掉第一个 . 及其左边的字符串:fil

就linux三剑客简单归纳

就linux三剑客简单归纳: 1:awk 习题1:用 awk 中查看服务器连接状态并汇总 netstat -an|awk '/^tcp/{++s[$NF]}END{for(a in s)print a,s[a]}' ESTABLISHED 1 LISTEN 20 习题2:统计 web 日志访问流量,要求输出访问次数,请求页面或图片,每个请求的总大小, 总访问流量的大小汇总 awk '{a[$7]+=$10;++b[$7];total+=$10}END{for(x in a)print b[x],

Linux下简单的socket通信实例

Linux下简单的socket通信实例 If you spend too much time thinking about a thing, you’ll never get it done. —Bruce Lee       学习网络编程也一段时间了,刚开始看<UNIX网络编程>的时候,觉得这本厚厚的书好难啊!看到后来,发现并没有想象中的那么难.如果你是新手,建议你看到第二部分结束后,开始着手写代码.不写代码肯定是不行的.看100遍也没有敲一遍实现一遍来的清楚.敲完以后,带着问题去看书,你会

linux下简单抓包分析

有时候会遇到一些问题需要我们来抓包分析,当手头又没有专业的抓包工具的时候,可以用tcpdump来替代一下(一般的发行版都自带这个工具) 比如我们要分析一下eth0接口下跟192.168.7.188 这个目的IP地址22端口的发包情况 tcpdump -i eth0 dst 192.168.7.188 and port 22 tcpdump -i eth0 dst 192.168.7.188 and port 22 tcpdump: verbose output suppressed, use -

Thinkbox.Deadline.v8.0.4.1.Linux 1DVD简单易用的管理和渲染+Xpedition Enterprise VX.2.1

Allen Bradley RSLogix5 v8.0 Win32-ISO 1DVD 使用RSLogix 5000 软件可以完全实现对模块的设置和监视 通过I/O 实现ControlLogix 背板连接 所有模块相关数据都包含在一个处理器数据对象中,这便于配置,监视和连接模块参数.RSLogix 5000功能更加强大,更加方便实用.RsLogix 5000编程软件除了为顺序控制提供梯形图编程外,还可以为运动控制提供完整的编程及调试支持.RSLogix 5000可同时完成顺序控制与运动控制. Sy