EXPECT_语法

关于 Tcl 和 Expect 的语法,请参考 Unix/Linux 平台任务的自动化相关部分。
例 1:下面是一个 telnet 到指定的远程机器上自动执行命令的 Expect 脚本,该脚本运 行时的输出如下:
# /usr/bin/expect sample_login.exp root 111111 spawn telnet 10.13.32.30 7001 Trying 10.13.32.30... Connected to 10.13.32.30. Escape character is '^]'.
% set arr(2) 1 1 这样就建立了一个两个元素的数组 arr。在 TCL 中,不存在相当于数组边界这样的东西 ,例如 % set arr(100) to to 这时数组中实际只存在 arr(1),arr(2)和 arr(100),这是和 C 语言不同的地方。用 arr ay size 命令可以返回数组的大小: % array size arr 3 访问数组的方法和访问标两实际是一样的,例如: % puts $arr(100) to 可以用同样的方法创建多维数组。 要使用数组中的所有元素,需要使用一种特殊的便利方式。首先要启动 startsearsh: % array startsearch arr s-1-arr 这里返回了一个搜索 id,你可以把它传递给某个变量,因为以后还要使用它进行进一 步的搜索: % set my_id [array startsearch arr] s-1-arr 现在 my_id 的内容是 s-1-arr,然后,就可以搜索 arr 的内容了: % array nextelement arr $my_id whi
Expect 语言是基于 Tcl 的, 作为一种脚本语言,Tcl 具有简单的语法:
cmd arg arg arg 一条 Tcl 命令由空格分割的单词组成. 其中, 第一个单词是命令名称, 其余的 是命令参数 . $foo $符号代表变量的值. 在本例中, 变量名称是 foo. [cmd arg] 方括号执行了一个嵌套命令. 例如, 如果你想传递一个命令的结果作为另外 一个命令的参数, 那么你使用这个符号 . "some stuff" 双引号把词组标记为命令的一个参数. "$"符号和方括号在双引号内仍被解 释. {some stuff} 大括号也把词组标记为命令的一个参数. 但是, 其他符号在大括号内不被解
Expect 是一个免费的编程工具语言,用来实现自动和交互式任务进行通信,而无需人 的干预。
Expect 的作者 Don Libes 在 1990 年开始编写 Expect 时对 Expect 做有如下定义:
Expect 是一个用来实现自动交互功能的软件套件(Expect [is a] software suite for automating interactive tools)。
accho console login: root Password: Last login: Sat Nov 13 17:01:37 on console Sun Microsystems Inc. SunOS 5.9 May 2004 #
Login Successfully...
# uname -p sparc # ifconfig -a lo0: flags=2001000849<UP,LOOPBACK,RUNNING,MULTICAST,IPv4,VIRTUAL> mtu 8232 index 1
释.
反斜线符号() 是用来引用特殊符号. 例如:n 代表换行. 反斜线符号也被用 来关闭"$"符号 , 引号,方括号和大括号的特殊含义 .
最好的学习方法就是边干边学,对于已经熟悉一种编程语言的人来说,用另一种新的语 言来写程序解决问题,是很容易的事。所以大概了解一下基本语法后,就一边动手解决问题, 一边查手册吧。
spawn telnet 10.13.32.30 7001 5. 函数定义和调用
proc do_console_login {login pass} {
..............
}
6. 变量赋值
set done 1
7. 循环
while ($done) {
................
} 8. 条件分支 Switch
Expect 语法
接触 Expect 是迫不得已。系统管理员在工作中经常会遇到这样的问题,需要实现一个 自动交互的工具,这个工具可以自动 Telnet 或者 Ftp 到指定的服务器上,成功 login 之后自 动执行一些命令来完成所需的工作。
当然,有很多编程语言可以去解决此类问题,比如用 C、Perl、或者 Expect。
参数可以是下面的命令之一: compare 按照字典顺序对字符串进行比较,根据相对关系返回-1,0 或者+1。 first 返回 string2 中第一次出现 string1 的位置,如果失败,返回-1。 last 返回 string2 中最后一次出现 string1 的位置,如果失败,返回-1 trim 从 string1 中删除开头和结尾的出现在 string2 中的字符 trimleft 从 string1 中删除开头的出现在 string2 中的字符。 trimright 从 string1 中删除结尾的出现在 string2 中的字符 下面几个用在 string 中的参数不需要 string2 变量: length 返回 tring1 的长度 tolower 返回将 string1 全部小写化的串 toupper 返回将 string1 全部大写化的串 运算 TCL 的运算方式比较别扭,它使用 expr 命令作为计算符号,其用法类似 C 语言的+=和/= ,例如, % set j [expr $i/5] 1 注意 TCL 会自动选择整数或者浮点计算: % set l [ expr $i /4.0] 1.25 % set l [ expr $i /4] 1 在 TCL 里面可以使用+ - * /和%作为基本运算符,另外通常还包括一些数学函数,如 a bs,sin,cos,exp 和 power(乘方)等等。
这里的 array nextelement 返回的是什么?可能有点出乎你的意料,是 arr 数组的下标 ,再执行一次 array nextelement 命令又会找出另外一个下标: % array nextelement arr $my_id 4 这样遍历下去,可以找出 arr 数组的所有下标,而知道下标之后,就可以用$arr(4)之 类的方式访问 arr 的内容了。当遍历完成之后,array nextelement 命令将简单地返回:
}
}
proc do_exec_cmd {} {
set timeout 5 send "n" expect "#"
send "uname -pn" expect "#" send "ifconfig -an" expect "#" send "exitn" expect "login:"
send_user "nnFinished...nn"
% array nextelement arr $my_id % 这时就可以停止遍历过程了,如果你想确认遍历是否完成,可以使用 array anymore 命 令:
% array anymore arr $my_id 0 返回 0 说明遍历已经完成。 串处理 TCL 中可以进行一般的串处理过程,这可以使用 string 命令和 append 命令,append 命令 将某个字符串加到另外一个字符串的后面:
inet 127.0.0.1 netmask ff000000 eri0: flags=1000843<UP,BROADCAST,RUNNING,MULTICAST,IPv4> mtu 1500 index 2
inet 10.13.22.23 netmask ffffff00 broadcast 10.13.22.255 ether 0:3:ba:4e:4a:aa # exit
switch -- $timeout_case { 0{ ............... } 1{ ............... } 2{ ...............
} } 9. 运算 incr timeout_case
此外,还可以看到 Expect 的以下命令: send ex pec t send_user 可以通过-d 参数调试 Expect 脚本: # /usr/bin/expect -d sample_login.exp root 111111
显然,尽管 C 是无所不能的,但是解决此类问题还是比较困难,除非你熟悉 Telnet 或 者 Ftp 协议。
曾经见过别人用 C 实现了一个简单的 Telnet 客户端协议的程序,可以在这个程序加入 自己的代码来捕获服务端的输出,根据这些输出来发送适当的指令来进行远程控制。
使用 Perl 一样可以实现这样的功能,然而,Expect 做的更出色,而且除支持 Unix/Linux 平台外,它还支持 Windows 平台,它就是为系统管理和软件测试方面的自动交互类需求而 产生的:
% set i 1 1 字符串应该用引号括起来: % set str "test" 'test' 要输出一个标量的内容,使用 put 语句: % puts $str test $用来说明 str 是一个变量。puts 函数在标准输出显示变量的内容。 数组也可以用 set 语句定义,实际上,tcl 中建立数组只是单个建立数组的元素。例如 , % set arr(1) 0 0
do_console_login $LOGIN $PASS do_ex ec _c md
合集下载

linux expect 语法

linux expect 语法

linux expect 语法
Linuxexpect是一种自动化脚本语言,它可以模拟人类的行为来操作计算机上的程序。

它的语法非常简单,主要由命令和参数构成。

命令可以是 shell 命令、expect 内置命令或自定义的函数。

expect 脚本主要用于自动化测试、自动化配置等场景。

比如,你可以编写一个 expect 脚本来自动登录远程服务器、执行一些指令并返回结果。

这样可以大大提高工作效率和减少人为错误。

expect 的语法主要包括以下几个方面:
1. spawn 命令:用于启动一个子进程,并与之交互。

语法为:spawn command [args]
2. expect 命令:用于等待子进程输出的特定内容,并在匹配到指定内容后执行相应操作。

语法为:expect pattern {action}
3. send 命令:用于向子进程发送数据。

语法为:send string
4. interact 命令:用于交互式地操作子进程。

语法为:interact
5. set 命令:用于设置变量的值。

语法为:set variable value
除了以上几个命令外,expect 还有很多其他的命令和语法,比如 sleep 命令、exp_continue 命令等。

如果你想深入了解 expect 的语法,可以查看相关的文档和教程。

- 1 -。

expect 语法

expect 语法

expect 语法Expect语法是一种常用的自动化测试工具,用于控制和验证命令行程序的行为。

本文将详细介绍Expect语法的使用方法和注意事项。

一、Expect语法简介Expect语法是基于Tcl脚本语言的一种扩展,专门用于编写自动化测试脚本。

它通过模拟用户与命令行程序的交互过程,可以实现自动化测试和验证命令行程序的正确性。

二、Expect语法的基本结构Expect脚本由一系列的Expect命令组成,每个Expect命令用于匹配和处理命令行程序的输出。

基本的Expect语法如下所示:```expect "pattern" {command1command2...} expect "pattern" {command3command4...}其中,"pattern"用于匹配命令行程序的输出,可以使用正则表达式进行模式匹配。

当匹配成功时,Expect会执行对应的命令。

三、Expect语法的常用命令1. spawn命令:用于启动一个新的命令行程序,并与之建立交互。

```spawn command```2. expect命令:用于匹配命令行程序的输出,并执行对应的命令。

```expect "pattern" {command1command2...}```3. send命令:用于向命令行程序发送命令。

```send "command\r"```4. interact命令:用于交互式地与命令行程序进行交互。

interact```5. timeout命令:用于设置超时时间,当超过指定时间后仍未匹配到输出时,执行对应的命令。

```timeout time {command1command2...}```四、Expect语法的使用示例下面以一个简单的例子来介绍Expect语法的使用。

假设我们要测试一个命令行程序,该程序会提示用户输入用户名和密码,并验证用户的身份。

expect虚拟语气的用法

expect虚拟语气的用法

expect虚拟语气的用法虚拟语气是一种表达虚拟概念的语法形式,主要用于表示说话人的主观愿望、建议、怀疑、猜测或明知不可能发生的情况。

在英语中,虚拟语气通常通过动词的形式来实现。

本文将介绍expect虚拟语气的用法。

一、expect的基本含义expect是英语中使用非常广泛的动词,其基本含义是“期望”、“预料”、“期待”、“指望”。

它通常用于表达对某事或某人的预期或预测。

expect虚拟语气的用法主要是用于表达一种假设、建议、建议或猜测的情况,其形式通常是通过动词的形式来表示。

具体来说,expect虚拟语气通常用于以下情况:1. 表达建议或请求当表达建议或请求时,通常使用should+动词原形或would+动词原形形式来表示虚拟语气。

例如:I suggest/request that you should take some measures to solve the problem. 我建议你应该采取一些措施来解决这个问题。

2. 表达愿望或假设当表达愿望或假设时,通常使用if+从句的形式来表示虚拟语气。

例如:I wish/expect that everything will be fine if we work hard. 我希望如果我们努力工作,一切都会好起来。

3. 表达怀疑或不确定当表达怀疑或不确定时,通常使用whether+从句的形式来表示虚拟语气。

例如:I expect whether you will come or not depends on what happens. 我期望你能否来取决于发生了什么事情。

4. 表达明知不可能发生的情况当表达明知不可能发生的情况时,通常使用“(It)be+adj.+that+主语+动词原形”的形式来表示虚拟语气。

例如:It is expected that the new project will be a failure. 人们预料这个新项目将会失败。

expect的固定用法

expect的固定用法

expect的固定用法1. Expect to do something - 预期做某事。

I expect to finish the project by the end of the week.我预期本周末完成这个项目。

2. Expect that - 预期。

We expect that sales will increase next quarter.我们预期下个季度销售额将增长。

3. Expect someone/something to do something - 期望某人/某事做某事。

I expect him to arrive on time.我期望他准时到达。

4. Expect from - 期望从...得到。

We expect a high level of professionalism from our employees.我们期望员工具备高水准的专业素养。

5. Expect the unexpected - 预料之外的事情。

In this line of work, you always need to expect the unexpected.在这个行业,你总是需要做好应对意外情况的准备。

6. What do you expect? - 你期望什么?You didn't study for the test, so what do you expect?你没有为考试学习,你期望什么结果?7. Expect the worst - 准备最坏的情况。

It's best to hope for the best but expect the worstin this situation.在这种情况下,最好抱最好的期望,但做最坏的打算。

请根据具体语境选择合适的短语或用法,以确保表达准确清晰。

expect 语法 用法

expect 语法 用法

expect 语法用法
expect是一个及物动词,表示“期望;指望;认为;预料;期待;预期”的意思,通常用作及物动词。

其基本用法包括以下几种:
1. 后接名词、代词、动词不定式或that从句作宾语。

例如:“I expect my wife to be home by now.”(我希望我妻子现在能到家。


2. 可接以动词不定式充当补足语的复合宾语。

例如:“I expect him to bring me a present.”(我指望他会给我带礼物来。


3. 当表示“预料”“期望”时,expect所接的that从句在虚拟式和陈述式之间有选择。

在表示“想”“认为”时,that有时可以省略。

4. 当表示否定意思时,可以使用so和not来代替前面的句子或分句的肯定式或否定式宾语。

5. 在表示过去未曾实现的“期望”“预料”时,需用过去完成时,而不用一般过去时。

6. expect不用于进行体,但在表示语气婉转时可用于现在进行时。

7. expect of和expect from都可表示“指望”“期望”,意思相同,可互换使用。

另外,expect还可用作“怀孕”的委婉说法,此时需用进行体。

以上是expect的语法用法,如需获取更多详细信息,建议查阅权威英文词典或英文语法书。

expect虚拟语气的用法 -回复

expect虚拟语气的用法 -回复

expect虚拟语气的用法-回复expect虚拟语气是指在表达未实现的愿望、建议、命令、推测、假设等时使用的一种语气形式。

它通常出现在主从句中,用于表示主句中所述的情况与事实相反或不可能实现。

以下是关于expect虚拟语气的用法和例句的详细解释:一、表示未实现的愿望1. 句型:主句(一般过去时)+ that + would/could/should + 动词原形2. 例句:- I expected that he would come to my party last night.(我本来期望他昨晚会来参加我的派对。

)- She expected that her parents could go on a trip with her.(她本来希望她的父母能和她一起去旅行。

)二、表示建议、命令或要求1. 句型:主句(should + 动词原形/动词原形)+ that + 主语+ 动词原形2. 例句:- I suggested that he should take a break.(我建议他休息一下。

)- The doctor recommended that she drink more water.(医生建议她多喝水。

)- The manager ordered that all employees attend the meeting.(经理命令所有员工参加会议。

)三、表示推测和假设1. 句型:主句(过去完成时/过去式)+ that + should + 动词原形2. 例句:- I thought that he should have apologized for his behavior.(我认为他本该为自己的行为道歉。

)- They believed that the government should have taken more action to address the issue.(他们认为政府本该采取更多行动来解决这个问题。

动词 expect 之用法

动词expect 的语法与惯用法1. 表示“期待”“期望”,通常为及物动词,不要受汉语影响在其后误加介词for。

如:我们不能期望一夜之间就取得成功。

误:We should not expect for success overnight.正:We should not expect success overnight.2. 后接动词时要用不定式,不用动名词。

如:I didn’t expect to find you here. 我没料到在这里碰到你。

若语义需要,其后还可接不定式的复合结构。

如:He expected her to go with him. 他期望她同他一起去。

3. 不要认为expect 只表示“期待”“期望”,它还可表示“预计”“预料”等。

如:I expect a storm. 我预计会有场暴风雨来。

I expect that I will be back on Sunday. 我预计星期日回来。

有时可用于不好的方面。

如:He expects to fail the exam. 他预料无法通过考试。

另外,注意expect a baby这一惯用表达,其意为“怀孕”。

如:It’s public knowledge she’s expecting a baby. 大家都知道她已怀孕了。

4. 其后可接that 从句,若从句谓语为否定,注意否定的转移。

如:I don’t expect that he has done such a thing. 我预料他不会干出这种事来。

在口语中有可表示“想”或“揣想”。

如:I expect you’re tired. 我想你是累了吧。

其后可接that 从句,但不接疑问词引导的从句,若遇有疑问词,则要使用“疑问词+ do you expect…”这样的句式。

如:你想什么时候离开?误:Do you expect when you will leave?误:Do you expect when to leave?正:When do you expect to leave?5.表示过去未曾实现的想法或打算,通常用过去完成时,但在一定的上下文当中,只要意思清楚,也可只用一般过去时。

Shell高级用法-----函数(function)及expect用法


else echo "-----代码校验失败" && exit
fi }
fun_deploy_direct_restart(){ #$direct_DIR/restart.sh systemctl restart httpd systemctl restart nginx echo "后端服务重启成功!!!" }
1、 function用 法
1、函数function是由若干条shell命令组成的语句块,实现代码重用和模块化编程。 2、它与shell程序形式上是相似的,不同的是它不是一个单独的进程,不能独立运 行,而是shell程序的一部分,定义函数只对当前的会话窗口有 效,如果再打开一个窗口再定义另外一个函数,就对另一个窗口有效,两者互不影响。 3、函数和shell程序比较相似,区别在于以下两种: (1)Shell程序在子Shell中运行。 (2)而Shell函数在当前Shell中运行。因此在当前Shell中,函数可以对shell中变量进行修改。
[root@centos-7 data]# cat score.sh #!/bin/bash source /data/functions # 调用指定的函数文件的绝对路径 read -p "Input your score:" SCORE func_is_digit $SCORE # 直接调用上面的functions文件 if [ $? -ne 0 ];then #判断上面的命令执行不等于0(不成功)就退出
4、 函 数 返 回 值
函数有两种返回值: 1、函数的执行结果返回值: (1) 使用echo等命令进行输出 (2) 函数体中调用命令的输出结果
2、函数的退出状态码: (1) 默认取决于函数中执行的最后一条命令的退出状态码 (2) 自定义退出状态码,其格式为: return 从函数中返回,用最后状态命令决定返回值:

linux之expect用法

linux之expect⽤法1. [#!/usr/bin/expect]这⼀⾏告诉操作系统脚本⾥的代码使⽤那⼀个shell来执⾏。

这⾥的expect其实和linux下的bash、windows下的cmd是⼀类东西。

注意:这⼀⾏需要在脚本的第⼀⾏。

2. [set timeout 30]基本上认识英⽂的都知道这是设置超时时间的,现在你只要记住他的计时单位是:秒。

timeout -1 为永不超时3. [spawn ssh -l username 192.168.1.1]spawn是进⼊expect环境后才可以执⾏的expect内部命令,如果没有装expect或者直接在默认的SHELL下执⾏是找不到spawn命令的。

所以不要⽤ “which spawn“之类的命令去找spawn命令。

好⽐windows⾥的dir就是⼀个内部命令,这个命令由shell⾃带,你⽆法找到⼀个 或 dir.exe 的可执⾏⽂件。

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

4. [expect "password:"]这⾥的expect也是expect的⼀个内部命令,有点晕吧,expect的shell命令和内部命令是⼀样的,但不是⼀个功能,习惯就好了。

这个命令的意思是判断上次输出结果⾥是否包含“password:”的字符串,如果有则⽴即返回,否则就等待⼀段时间后返回,这⾥等待时长就是前⾯设置的30秒5. [send "ispass\r"]这⾥就是执⾏交互动作,与⼿⼯输⼊密码的动作等效。

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

6. [interact]执⾏完成后保持交互状态,把控制权交给控制台,这个时候就可以⼿⼯操作了。

如果没有这⼀句登录完成后会退出,⽽不是留在远程终端上。

如果你只是登录过去执⾏7.$argv 参数数组expect脚本可以接受从bash传递过来的参数.可以使⽤[lindex $argv n]获得,n从0开始,分别表⽰第⼀个,第⼆个,第三个....参数下⾯的expect脚本的例⼦执⾏这个⽂件./launch.exp 1 2 3屏幕上就会分别打印出参数send_user⽤来发送内容给⽤户。

expect用法和短语

expect用法和短语
1. 预期、期待:
- I expect good results from this project.(我期望这个项目有好的结果。

) - She expected him to arrive on time.(她期待他准时到达。


2. 预计、预料:
- We expect a lot of rain this weekend.(我们预计这个周末会有很多雨。

) - The company expects to earn a profit this year.(公司预计今年会盈利。


3. 要求、期望:
- Her parents expect her to get good grades.(她的父母期望她取得好成绩。

) - The boss expects everyone to arrive on time.(老板要求每个人准时到达。


4. 短语:
- expect to do something: 期望做某事
- expect something from someone: 期望从某人那里得到某物
- be expected to do something: 被期望做某事
- expect the worst: 做最坏的打算
- not expect too much: 不期望太多
- beyond expectation: 超出预期
需要注意的是,具体的用法和含义可能会因语境而有所不同。

以上是一些常见的用法和短语,希望对你有所帮助。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
相关文档
最新文档