2016-02-11 5 views
0

Я следующий сценарий:если заявление, не работает

#!/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 [email protected]* 
           send ena\r 
           expect "Password:" 
           send $pw2\r 
           expect "[email protected]*" 
           send skip-page-display\r 
           expect [email protected]* 
           send "show running-config\r" 
           log_file "$ip.conf" 
           expect "[email protected]*" 
           send "exit\r" 
           expect "[email protected]*" 
           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, чтобы проверить, что ожидается. Заранее благодарим за помощь!

ответ

1

Вы условно ожидаете разные вещи, используя ожидание с несколькими парами паттернов/акцентов, и используйте exp_continue. Вместо

if { expect "Please Enter Password:" } { 
    send $pw\r } 
} elseif { expect "Please Enter Login Name:" } { 
    send $user\r 
    send $pw\r 
} 
expect [email protected]* 

ли это

expect { 
    "Please Enter Password:" { send $pw\r; exp_continue } 
    "Please Enter Login Name:" { send $user\r$pw\r; exp_continue } 
    [email protected]* 
} 

Вы имели ошибку: elseif требует пространства между ним и открывающей скобкой. И да, expect неизвестно выражение Tcl (docs)

После того как вы send exit, вы должны expect eof

0

Поскольку TCL reference documentation shows, if требует выражения в качестве своего условия.

if expr1 ?then? body1 elseif expr2 ?then? body2 elseif ... ?else? ?bodyN?

expect "string" не является допустимым выражением, как оценивается expr.

+0

спасибо за эту информацию, но как я могу решить это? – colttt

Смежные вопросы