linux expect for(expect for等于什么)

大家好,今天来为大家分享linux expect for的一些知识点,和expect for等于什么的问题解析,大家要是都明白,那么可以忽略,如果不太清楚的话可以看看本篇文章,相信很大概率可以解决您的问题,接下来我们就一起来看看吧!

linux expect 详解

Expect是基于Tcl语言开发的工具,主要用于自动化交互式操作场景。它能够将需要在多台服务器上执行的交互过程,如SSH登录、FTP登录等,编写成脚本实现自动化完成。尤其在需要对多台服务器执行相同操作时,大大提高了系统管理人员的工作效率。

常用指令命令速查实例:

1.简单例子:自动登录主机。

执行命令后,输出结果如下:

通过spawn开启一次SSH连接后,会要求输入密码,第一个send命令将密码发送到进程,第二个send命令用于退出SSH。

如果未开启进程直接使用send命令,结果会直接输出文本,类似于在bash脚本中直接输出文本。

expect命令与send命令相反,用于等待进程反馈。expect命令可以接收字符串或正则表达式参数,用于匹配并执行相应动作。

若直接在expect程序中expect一个字符串,除非输入特定内容,否则不会执行任何动作。

expect语言使用模式-动作的方式,单一匹配和多分支匹配是其主要匹配方式。

spawn命令用于开启新进程,如SSH连接,发送命令到shell环境中。

interact指令用于等待人工干预,如执行完hostname命令后,留在ssh界面等待操作。

set指令用于设置变量值,如改造基础示例脚本以传递参数。

传参场景下,expect同样支持参数传递。argv变量存储参数数量,argv0为脚本名称。使用puts指令输出参数数量和指定位置的参数值。

incr指令用于增量操作,如数学计算。[]在expect中类似shell中的`或(),用于执行包裹内部的命令。

数组定义结合set指令实现,数组元素之间用空格分隔。数组访问通过[lindex$argv 0]等方法实现。

循环支持for、while、foreach结构,如for循环、while循环和foreach循环的实现。

通过修改基础实例代码,实现SSH自动登录,自动回答系统提示,简化了人工操作。

Linux系统里的expect里面怎么打印当前时间

在 expect中可以通过调用 Tcl内置的 clock模块来获取当前时间。具体可以使用以下命令来获取当前时间并输出到终端:

set now [clock format [clock seconds]-format"%Y-%m-%d%H:%M:%S"]

puts"当前时间为:$now"

上述代码中,首先使用 clock seconds命令获取当前时间戳,然后通过 clock format命令将时间戳格式化为指定的日期时间字符串。其中,-format参数用于指定日期时间字符串的格式,例如%Y-%m-%d%H:%M:%S表示年月日时分秒。最后使用 puts命令将当前时间字符串输出到终端。

expect脚本在Linux下是如何使用的

如果你是expect脚本语言的新手,可以首先从我们的expect的“hello world”样例(英文)开始。

1,使用“-c”选项,从命令行执行expect脚本

expect可以让你使用“-c”选项,直接在命令行中执行它,如下所示:

$ expect-c'expect"\n"{send"pressed enter\n"}

pressed enter

$

如果你执行了上面的脚本,它会等待输入换行符(\n)。按“enter”键以后,它会打印出“pressed enter”这个消息,然后退出。

2,使用“-i”选项交互地执行expect脚本

使用“-i”选项,可以通过来自于标准输入的读命令来交互地执行expect脚本。如下所示:

$ expect-i arg1 arg2 arg3

expect1.1>set argv

arg1 arg2 arg3

expect1.2>

正常情况下,当你执行上面的expect命令的时候(没有“-i”选项),它会把arg1当成脚本的文件名,所以“-i”选项可以让脚本把多个参数当成一个连续的列表。

当你执行带有“-c”选项的expect脚本的时候,这个选项是十分有用的。因为默认情况下,expect是交互地执行的。

3,当执行expect脚本的时候,输出调试信息

当你用“-d”选项执行代码的时候,你可以输出诊断的信息。如下所示:

$ cat sample.exp

#!/usr/bin/expect-f

expect"\n";

send"pressed enter";

$ expect-d sample.exp

expect version 5.43.0

argv[0]= expect argv[1]=-d argv[2]= sample.exp

set argc 0

set argv0"sample.exp"

set argv""

executing commands from command file sample.exp

expect: does""(spawn_id exp0) match glob pattern"\n"? no

expect: does"\n"(spawn_id exp0) match glob pattern"\n"? yes

expect: set expect_out(0,string)"\n"

expect: set expect_out(spawn_id)"exp0"

expect: set expect_out(buffer)"\n"

send: sending"pressed enter" to{ exp0 pressed enter}

4,使用“-D”选项启动expect调试器

“-D”选项用于启动调试器,它只接受一个布尔值的参数。这个参数表示提示器必须马上启动,还是只是初始化调试器,以后再使用它。

$ expect-D 1 script

“-D”选项左边的选项会在调试器启动以前被处理。然后,在调试器启动以后,剩下的命令才会被执行。

$ expect-c'set timeout 10'-D 1-c'set a 1'

1: set a 1

dbg1.0>

5,逐行地执行expect脚本

通常,expect会在执行脚本之前,把整个脚本都读入到内存中。“-b”选项可以让expect一次只读取脚本中的一行。当你没有写完整个脚本的时候,这是十分有用的,expect可以开始执行这个不完整的脚本,并且,它可以避免把脚本写入到临时文件中。

$ expect-b

6,让expect不解释命令行参数

你可以使用标识符让expect不解释命令行参数。

你可以像下面这样的读入命令行参数:

$ cat print_cmdline_args.exp

#!/usr/bin/expect

puts'argv0: [lindex$argv 0]';

puts'argv1: [lindex$argv 1]';

当执行上面的脚本的时候,会跳过命令行选项,它们会被当成参数(而不是expect选项),如下所示:

$ expect print_cmdline_args.exp-d-c

argv0:-d

argv1:-c

阅读剩余
THE END