1

我是一个初学者……我写了一个小脚本,它必须登录到路由器并执行一些命令。但不知何故,我发现即使我使用了发送“管理员显示平台”三次,它是只为我工作两次.. 我只得到admin show platform两次的输出。

任何人都可以检查代码并指出我实际上在哪里搞砸了代码..

Gsaxena# 
Gsaxena# 
Gsaxena# ./testTool  
spawn /usr/bin/ksh  
telnet 5.28.7.103  
$ telnet 5.28.7.103  
Trying 5.28.7.103...   
Connected to 5.28.7.103.  
Escape character is '^]'.  


User Access Verification   

Username:   
Username: lab  
Password:   


RP/0/RP0/CPU0:Billorani#debug ospf ospf1 adj  
Mon Oct 14 17:16:06.144 UTC  
**RP/0/RP0/CPU0:Billorani#show platform**  
Mon Oct 14 17:16:06.416 UTC  
Node          Type              PLIM               State           Config State  
------------- ----------------- ------------------ --------------- ---------------  
x/x/x0      xxxxG          N/A                IN-RESET        PWR,NSHUT,MON  

**RP/0/RP0/CPU0:Billorani#show platform**  
Mon Oct 14 17:16:06.416 UTC  
Node          Type              PLIM               State           Config State  
------------- ----------------- ------------------ --------------- ---------------  
x/x/xxx0      xxxxG          N/A                IN-RESET        PWR,NSHUT,MON  
RP/0/RP0/CPU0:Billorani#  

Gsaxena#   
Gsaxena#   
Gsaxena#   
Gsaxena#   
Gsaxena#   


#!/usr/bin/expect
    set timeout 30
    set hostcut "Bil"
        sleep 5
        set timeout 5

        spawn /usr/bin/ksh
        send "telnet 5.8.7.103\r"
        expect ".*\'\^\]\'\. *"
        send "\r"
        expect "Username\:"
        send "lab\n"
        expect "Password\: "
        send "lab\n"
        sleep 10

        expect -re "RP\/.\/.*\/CPU.:$hostcut.*#"
        send "debug ospf ospf1 adj\n"

        expect -re "RP\/.\/.*\/CPU.:$hostcut.*#"
        send "admin show platform\n"

        expect -re "RP\/.\/.*\/CPU.:$hostcut.*#"
        send "admin show platform\n"

        expect -re "RP\/.\/.*\/CPU.:$hostcut.*#"
        send "admin show platform\n"
4

2 回答 2

2

我真的不应该把它放在实际的答案中,而是放在评论中,因为我没有给你最终的答案,但似乎评论只能由已经存在一段时间的人留下(之前的声誉最低你可以离开他们)。

无论如何,我想建议的是您exp_internal 1在脚本开头附近的某个位置添加。这将提供大量有用的调试信息,并且很可能会指出正在发生的事情。如果您需要帮助,请随时在此处发布。

从您发布的信息中我无法判断出什么问题……似乎没有什么明显的错误。我会做不同的一件事,而不是生成一个 Korn shell 进程,然后向它发送一个 telnet 命令,我将直接生成 telnet 命令(更少的代码,更少的资源)。但这不是困扰你的事情,所以不要介意。

我不熟悉您登录的操作系统...是 Cisco IOS XR 吗?我对您发出admin show platform命令但仅show platform显示在标准输出中的事实感到困惑?另外,一些提示显示的双星号 (**) 是怎么回事,而另一些则没有?

最后一件事,可能看起来很愚蠢,但是......您可以手动访问设备并按照确切的顺序发出这 4 个确切的命令吗?

问候,詹姆斯

于 2013-10-16T02:56:37.557 回答
0

在您的代码中

send "admin show platform\n"

使用“\r”而不是“\n”

于 2016-10-28T05:23:44.213 回答