expect expect学习笔记及实例详解
(参考链接
http://wenku.baidu.com/view/b65e103610661ed9ad51f374.html)
1.expect是基于tcl演变而来的,所以很多语法和tcl类似,基本的语法如下
所示:
1.1首行加上/usr/bin/expect
1.2spawn:后面加上需要执行的shell命令,比如说spawnsudotouchtestfile
1.3expect:只有spawn执行的命令结果才会被expect捕捉到,因为spawn会启
动一个进程,只有这个进程的相关信息才会被捕捉到,主要包括:标准输入的提
示信息,eof和timeout。
1.4send和send_user:send会将expect脚本中需要的信息发送给spawn启动
的那个进程,而send_user只是回显用户发出的信息,类似于shell中的echo而
已。
2.一个小例子,用于linux下账户的建立:
filename:account.sh,可以使用./account.shnewaccout来执行;
1#!/usr/bin/expect
2
3setpasswd"mypasswd"
4settimeout60
5
6if{$argc!=1}{
7 send"usage./account.sh\$newaccount\n"
8 exit
9}
10
11setuser[lindex$argv[expr$argc-1]]
12
13spawnsudouseradd-s/bin/bash-gmygroup-m$user
14
15expect{
16 "assword"{
17 send_user"sudonow\n"
18 send"$passwd\n"
19 exp_continue
20 }
21 eof
22 {
23 send_user"eof\n"
24 }
25}
26
27spawnsudopasswd$user
28expect{
29 "assword"{
30 send"$passwd\n"
31 exp_continue
32 }
33 eof
34 {
35 send_user"eof"
36 }
37}
38
39spawnsudosmbpasswd-a$user
40expect{
41 "assword"{
42 send"$passwd\n"
43 exp_continue
44 }
45 eof
46 {
47 send_user"eof"
48 }
49}
3.注意点:
第3行:对变量赋值的方法;
第4行:默认情况下,timeout是10秒;
第6行:参数的数目可以用$argc得到;
第11行:参数存在$argv当中,比如取第一个参数就是[lindex$argv0];并且
如果需要计算的话必须用expr,如计算2-1,则必须用[expr2-1];
第13行:用spawn来执行一条shell命令,shell命令根据具体情况可自行调整;
有文章说sudo要加-S,经过实际测试,无需加-S亦可;
第15行:一般情况下,如果连续做两个expect,那么实际上是串行执行的,用
例子中的结构则是并行执行的,主要是看匹配到了哪一个;在这个例子中,如果
你写成串行的话,即
expect"assword"
send"$passwd\n"
expecteof
send_user"eof"
那么第一次将会正确运行,因为第一次sudo时需要密码;但是第二次运行时由于
密码已经输过(默认情况下sudo密码再次输入时间为5分钟),则不会提示用户
去输入,所以第一个expect将无法匹配到assword,而且必须注意的是如果是
spawn命令出现交互式提问的但是expect匹配不上的话,那么程序会按照timeout
的设置进行等待;可是如果spawn直接发出了eof也就是本例的情况,那么expect
"assword"将不会等待,而直接去执行expecteof。
这时就会报expect:spawnidexp6notopen,因为没有spawn在执行,后面的
expect脚本也将会因为这个原因而不再执行;所以对于类似sudo这种命令分支
不定的情况,最好是使用并行的方式进行处理;
第17行:仅仅是一个用户提示而已,可以删除;
第18行:向spawn进程发送password;
第19行:使得spawn进程在匹配到一个后再去匹配接下来的交互提示;
第21行:eof是必须去匹配的,在spawn进程结束后会向expect发送eof;如果
不去匹配,有时也能运行,比如sleep多少秒后再去spawn下一个命令,但是不
要依赖这种行为,很有可能今天还可以,明天就不能用了;
4.其他
下面这个例子比较特殊,在整个过程中就不能expecteof了:
1 #!/usr/bin/expect
2
3 settimeout30
4 spawnssh10.192.224.224
5 expect"password:"
6 send"mypassword\n"
7 expect"*$"
8 send"mkdirtmpdir\n"
9 expect"*$"
这个例子实际上是通过ssh去登录远程机器,并且在远程机器上创佳一个目录,
我们看到在我们输入密码后并没有去expecteof,这是因为ssh这个spawn并没
有结束,而且手动操作时ssh实际上也不会自己结束除非你exit;所以你只能
expectbash的提示符,当然也可以是机器名等,这样才可以在远程创建一个目
录。
注意,请不要用spawnmkdirtmpdir,这样会使得上一个spawn即ssh结束,那
么你的tmpdir将在本机建立。
当然实际情况下可能会要你确认sshkey,可以通过并行的expect进行处理,不
多赘述。
5.觉得bash很多情况下已经很强大,所以可能用expect只需要掌握这些就好了,
其他的如果用到可以再去google了。
expect命令详解
参考链接:
http://wenku.baidu.com/link?url=ZAy9QuHSEiLrQuJSKqcw6NIOaFFAgR021t39lh9JAe-hS_Mbu96XibGKIwcLe4CltcIpJJY4LqauIdQ-VZGY-ojcEAmQAUVvj-gh4mfII9C
分享到:
相关推荐
Linux Expect 是一个强大的自动化工具,它允许用户编写脚本来自动处理需要交互的程序,比如SSH登录、SCP文件传输等。Expect 基于TCL语言,因此在使用之前需要先安装TCL环境。本压缩包提供了Linux Expect的安装教程、...
### Linux下的Expect交互式命令使用方法 #### 一、Expect简介 Expect 是一种自动化交互式命令行工具,它主要用于在 Linux 或 Unix 系统中控制交互式应用,例如 Telnet、SSH、FTP 和其他需要与用户进行交互的应用...
Linux Expect 是一个强大的自动化工具,特别适用于自动化处理需要用户交互的命令或程序。它使用TCL脚本语言,能够模拟用户输入,使得自动化任务在面对需要输入确认、密码或其他交互式响应的场景时变得简单。Expect ...
包含两个包: expect-5.43.0-8.el5.i386.rpm expect-devel-5.43.0-8.el5.i386.rpm 功能介绍见:http://blog.csdn.net/wang7dao/article/details/7724917
在Linux环境中,`expect`是一个强大的自动化脚本工具,它允许程序员或系统管理员与交互式应用程序进行自动对话。这个工具由Trent Mick开发,并且基于Tcl语言,它极大地简化了自动化过程,尤其是那些需要用户输入的...
在Linux环境中,`expect`是一个强大的自动化工具,它允许用户编写脚本来自动交互与命令行接口(CLI)程序,特别是那些需要用户输入确认或特定密码的程序。`expect`是基于TCL(Tool Command Language)语言的一个扩展...
Linux下的`expect`工具是一个强大的自动化管理利器,尤其适合处理那些需要交互式输入的脚本任务,比如自动登录、密码输入、脚本自动化等。它基于Tcl语言,通过模拟用户交互来自动化复杂的命令行操作。`expect`的安装...
Linux Expect和TCL是两种强大的自动化工具,它们在系统管理和脚本编写中有着广泛的应用。在Linux环境中,Expect被设计用来自动交互式地控制程序,比如自动登录远程服务器、执行SSH命令、自动化脚本测试等。而TCL是一...
Linux Expect 是一个强大的工具,它基于Tcl语言,专门用于自动化需要用户交互的任务,例如SSH登录、FTP传输等。在很多场景中,手动输入用户名和密码进行登录或执行远程命令可能会变得繁琐,尤其是在频繁操作的情况下...
Linux中的Expect工具、正则表达式以及sed工具的使用是进行Linux自动化运维管理和文本处理不可或缺的技能。在实际运维和开发过程中,熟练运用这些技术可以大幅提升工作效率和准确性。 Expect是一种自动化交互式应用...
### Linux下的Expect简单用法及举例 #### 一、引言 在Linux环境中,自动化运维是提高工作效率的重要手段之一。而`Expect`作为一种强大的自动化工具,可以用来模拟交互式会话,实现对远程服务器的自动登录、命令执行...
Linux中的`expect`工具是一个强大的自动化脚本工具,主要用于与命令行交互,特别是与需要用户输入的程序进行自动化通信,如SSH登录、FTP传输等。它基于TCL语言,因此在使用`expect`之前需要先确保系统安装了TCL和...
【expect安装包】是针对Unix/Linux环境中的一种自动化脚本工具,它主要被设计用来自动处理交互式的命令行程序。这个工具软件的核心是Tcl(Tool Command Language),这是一种动态类型的脚本语言,以其简洁和强大的...
Expect 实现 Linux 自动远程登录技术 Expect 是 Unix 系统中的一种软件工具,用于自动化控制和测试,常用于交互式软件中,如 telnet、ftp、passwd、fsck、rlogin、ssh 等。通过 Expect,可以实现 Linux 的自动远程...
Linux Expect 是一个强大的脚本工具,它允许程序员或者系统管理员自动化与交互式应用程序的交互,如telnet、ftp、passwd等。在这个特定的场景中,我们利用 Expect 脚本来实现自动登录到交换机并保存配置。这种方法...
Introduction to Expect The Expect package was installed in the LFS temporary tools directory for testing other packages. These procedures install it in a permanent location. It contains tools for ...
Linux Expect 是一个强大的工具,它允许自动化与交互式应用程序的交互,特别适用于自动化登录和执行命令在远程服务器上的任务。这个工具使用Tcl语言作为基础,并且提供了一个友好的接口来处理诸如SSH这样的协议,...
Linux中的`expect`是一个强大的工具,它允许自动化与交互式应用程序的交互,特别是对于需要手动输入密码或响应提示的情况,如SSH登录、SCP文件传输等。`expect`基于Tcl编程语言,使得编写自动化脚本变得简单。在本文...