📜  带有示例的 Linux 中的 expect 命令(1)

📅  最后修改于: 2023-12-03 15:09:44.658000             🧑  作者: Mango

带有示例的 Linux 中的 expect 命令

简介

Expect 是一种流程控制语言,允许与交互式软件进行通信。可以在 Linux 系统中使用 Expect 命令来模拟人与交互式软件的交互,从而实现自动化操作,提高工作效率。

Expect 命令适用于需要与其他程序进行交互、自动化任务和模拟操作终端等场合。Expect 命令使用 Tcl 语言进行编写,掌握 Tcl 语言可以使编写 Expect 脚本的效率更高。

安装

在大多数 Linux 系统中,Expect 命令已经自带。如果您的系统没有安装 Expect 命令,可以使用以下命令进行安装:

sudo apt-get install expect
基本语法

Expect 脚本由一系列的 expect/send 参数对组成。其中,expect 参数表示需要匹配的字符串,send 参数表示需要发送的字符串。Expect 可以自动对相应的字符串进行匹配和发送。

下面是 expect/send 参数的基本语法:

expect "expected_string" {
    send "send_string"
}

如果字符串匹配成功,则执行 send 参数;否则,Expect 将会等待其他的字符串输入,直到找到与之匹配的字符串。

下面是一个使用 Expect 命令的示例:

#!/usr/bin/expect
spawn ssh root@192.168.1.1
expect "password:"
send "123456\r"
expect "root@192.168.1.1:"
send "ls -lh\r"
expect "root@192.168.1.1:"
send "exit\r"
expect eof

在上面的示例中,首先使用 spawn 命令启动一个 SSH 会话,并关联到 expect 进程中。然后使用 expect 命令等待输入密码的提示信息,如果匹配到了 "password:" 字符串,则使用 send 命令发送密码 "123456"。接下来,使用 expect 命令等待命令行提示符 "root@192.168.1.1:",如果匹配上了这个字符串,则发送命令 "ls -lh"。最后,使用 expect 命令等待命令行提示符并发送 "exit" 命令,使用 eof 参数表示等待 expect 进程结束。

示例

下面是一个更加详细的示例,用来演示 Expect 命令的基本用法:

#!/usr/bin/expect
spawn telnet 192.168.1.1
expect "Username:"
send "admin\r"
expect "Password:"
send "password\r"
expect ">"
send "enable\r"
expect "Password:"
send "enable_password\r"
expect "#"
send "show version\r"
expect "#"
send "exit\r"
expect eof

在上面的示例中,使用 spawn 命令启动一个 Telnet 会话,并关联到 expect 进程中。然后使用 expect 命令等待输入用户名的提示信息,如果匹配到了 "Username:" 字符串,则使用 send 命令发送用户名 "admin"。接着,等待输入密码的提示信息并发送密码 "password"。如果匹配到了命令提示符 ">", 则发送命令 "enable"。在等待输入密码的提示信息后,发送 enable 密码"enable_password"。最后,发送命令 "show version",等待输出结果,结束会话。

总结

Expect 是一种流程控制语言,可以在 Linux 系统中使用 Expect 命令来模拟人与交互式软件的交互,实现自动化操作。Expect 命令使用 Tcl 语言进行编写,掌握 Tcl 语言可以使编写 Expect 脚本的效率更高。Expect 命令的语法主要由 expect/send 参数组成,可以灵活运用,实现相应的自动化任务。