Expect是一种用于自动化交互式shell的脚本语言。例如,如果我们想通过使用一些expect脚本在shell上自动化Cisco设备。Expect脚本通常适用于指定的字符串。大多数使用的expect命令如下所示。
null
-
send
向进程发送字符串 -
expect
等待进程中的特定字符串 -
spawn
启动新命令
期望脚本安装
Expect有一个shell来解释和执行Expect命令。默认情况下,大多数Linux发行版不安装此软件包。
软呢帽、Cent OS、红帽:
$ sudo yum install expect
Ubuntu、Debian、Kali、Mint:
$ apt install expect

语法
我们将使用以下语法 expect
命令。
expect [ -dDinN ] [ -c cmds ] [ [ -[f|b] ] cmdfile ] [ args ]
用法
Expect通常从脚本文件中读取脚本。现在我们将创建一个简单的脚本,用于登录Cisco设备。我们的脚本文件如下所示。
#!/usr/bin/expect expect "poftut" send "com"
-
#!/usr/bin/expect
行用于将expect设置为该脚本的解释器。如果我们将这个脚本文件直接提供给expect解释器,那么可以忽略这个问题,但是使用它将使脚本文件更具可读性。 -
expect "poftut"
用来表达我们期待的脚本的行poftut
继续。如果poftut
未提供文本脚本文件将不会跳转到下一行。 -
send "com"
将发送到远程设备或电流输出com
字符串。
我们可以在当前bash中通过提供脚本文件名来测试我们的脚本,比如 exp1.sc
$ expect exp1.sc

超时
性能问题超时。超时用于设置等待连接或响应的最长时间。如果超时值为reach,则将评估下一步。超时值可以用 set timeout
命令。在本例中,我们将设置超时5秒。
#!/usr/bin/expect set timeout 5 expect "poftut" send "com"
我们不为这个expect脚本输入任何值,5秒后计算下一步。
$ expect exp1.sc

生成外部进程
现在我们可能需要使用ssh之类的外部工具来连接远程主机并在远程主机上运行expect脚本。现在我们将创建一个到远程主机的ssh连接并输入密码。
#!/usr/bin/expect set timeout 5 spawn ssh localhost expect "[email protected]'s password: " send "123456" expect "[email protected]:~$" send "uname -a"
-
spawn ssh localhost
将使用ssh协议连接到本地主机。 -
expect " [email protected] 's password: "
将期望指定的文本。 -
send "123456"
用于发送ssh连接的密码
相关文章: Bash For和While循环示例
© 版权声明
文章版权归作者所有,未经允许请勿转载。
THE END