如何在bash shell脚本中使用expect

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何在bash shell脚本中使用expect相关的知识,希望对你有一定的参考价值。

参考技术A 1、首先检查你机器上有没有expect(我知道ubuntu默认是没有安装的)
ls /usr/bin | grep expect 看看有没有装expect
2、没有的话需要安装
在ubuntu的软件安装中心,搜索tcl 和tk 和expect并安装;
也可以命令行输入sudo apt-get install tcl tk expect
3. 环境ready了后,可以在shell脚本中用Here document的方式使用expect命令
Here document格式如下:
expect <<!
这中间都是expect命令
!
为防止错误,建议都顶格写,前面不要留空格。本回答被提问者和网友采纳
参考技术B expect 实现功能模块,shell脚本传参给expect脚本。

无法在 bash 脚本期望中发送长命令

【中文标题】无法在 bash 脚本期望中发送长命令【英文标题】:Cannot Send Long Command in bash Script Expect 【发布时间】:2016-09-06 06:10:29 【问题描述】:

我在使用我的期望脚本发送长命令时遇到问题。我正在使用 telnet 访问路由器:

#! /usr/bin/expect -f
#
#

spawn telnet 192.168.0.5

expect 
  "login:"
    
        send "admin\r"
        expect "Password:"
        send "admin\r"

        expect ">"
        send "enable\r"
        expect "Password:"
        send "\r"

        # My Command
        expect "#"
        send "terminal length 0\r"
        expect "#"
        send "show running-config | include ip nat pool-group\r"
    


expect "#"
send "exit\r"

我在php中使用exec来运行上面的脚本

<?php
exec(mybinfile , $returnvalue);
print_r($returnvalue);

当我检查输出时,似乎发送了不正确的命令。但是,它仍然有效。为什么会这样输出?

结果如下:

[14] => R1#terminal length 0
[15] => R1#show running-config | include ip nat pool-gro$ng-config | include ip nat pool-grou          $ng-config | include ip nat pool-group

我尝试减少命令中的字符数,如下例所示,这很好:

show running-config | include ip nat pool-gro

如果这是我在print_r 中看到的输出,我会遇到问题吗?

【问题讨论】:

Will I encounter problems if that is the output I can see in print_r? 不会。不会有问题,这就是 expect 的工作方式。字符串越长,越乱。 它是删除设备、telnet 本身以及 expect 如何从 telnet 捕获输出的组合。这与“期望如何工作”和“胡言乱语”无关。当您“手动”远程登录到该设备时,某些文本是否显示为粗体或突出显示? 【参考方案1】:

除了发出terminal length 0 命令之外,您还可以发出terminal width 511 命令来防止换行。这为我们解决了类似的问题。

来自the documentation:

要设置控制台会话期间显示信息的宽度,请在全局配置模式下使用 终端宽度 命令。要禁用,请使用此命令的 no 形式。

终端宽度

无终端宽度

另请参阅 ServerFault 上的 this question。

【讨论】:

以上是关于如何在bash shell脚本中使用expect的主要内容,如果未能解决你的问题,请参考以下文章

在 bash 脚本中为 ssh 命令提供密码,无需使用公钥和 Expect

shell中调用expect 我编写了一个普通用户切换到root的脚本。

linux12shell编程 --> expect

linux总结shell

Shell脚本使用汇总整理

利用shell脚本远程磁盘分区