if statement,不起作用

时间:2016-02-11 12:46:14

标签: expect

我有以下脚本:

#!/bin/bash

pw=$1
pw2=$2
file=$3
user="admin"

if [ $# -eq 0 ]
        then
                echo "bitte PW und IP-file als Parameter angeben"
fi


for ip in `cat $file`;
        do
                ping -c1 $ip >/dev/null 2>&1
                if [ $? -eq 0 ];  
                        then      
                                echo $ip
                                /usr/bin/expect <<EOD
                                spawn /usr/bin/telnet $ip
                                if { expect "Please Enter Password:" } {
                                        send $pw\r }
                                } elseif{ expect "Please Enter Login Name:" } {
                                        send $user\r
                                        send $pw\r }
                                expect telnet@*
                                send ena\r
                                expect "Password:"
                                send $pw2\r
                                expect "telnet@*"
                                send skip-page-display\r
                                expect telnet@*
                                send "show running-config\r"
                                log_file "$ip.conf"
                                expect "telnet@*"
                                send "exit\r"
                                expect "telnet@*"
                                send "exit\rn"
EOD                               
                else              
                        echo "$i nicht erreicht"
fi                                
done  

但它没有用,我收到了以下错误:

spawn /usr/bin/telnet IP
invalid bareword "expect"
in expression " expect "Please Enter Passwor...";
should be "$expect" or "{expect}" or "expect(...)" or ...
    (parsing expression " expect "Please Enter ...")
    invoked from within
"if { expect "Please Enter Password:" } {
                                        send top_SECRET\r }"

我是如何让这个工作的? 有些交换机需要一个用户名,有些则不需要,所以我需要一个If-Statement来检查预期的内容。 在此先感谢您的帮助!

2 个答案:

答案 0 :(得分:1)

通过使用具有多个模式/动作对的expect,有条件地期望不同的事物,并使用exp_continue。而不是

if { expect "Please Enter Password:" } {
    send $pw\r }
} elseif { expect "Please Enter Login Name:" } {
    send $user\r
    send $pw\r 
}
expect telnet@*

这样做

expect {
    "Please Enter Password:"   { send $pw\r; exp_continue }
    "Please Enter Login Name:" { send $user\r$pw\r; exp_continue }
    telnet@*
}

您遇到错误:elseif需要在它与开放式大括号之间留一个空格。是的,expect对于Tcl表达式(docs

是未知的

send exit之后,您应该expect eof

答案 1 :(得分:0)

由于TCL reference documentation showsGlide.with(context) .load(url) .placeholder(R.drawable.empty_logo) .error(R.drawable.error) .into(imageView); 需要表达式作为条件。

  

如果expr1?那么? body1 elseif expr2?然后呢? body2 elseif ...?别的? ?bodyN?

if不是由expect "string"评估的有效表达式。