в то время как циклы ожидают - PullRequest
4 голосов
/ 21 апреля 2011

Я использую ожидание в Bash. Я хочу, чтобы мой скрипт телнет в ящик, ожидал приглашения, отправил команду. Если сейчас есть другое приглашение, оно должно быть выполнено, иначе оно должно снова отправить эту команду. Мой сценарий выглядит так:

\#!bin/bash  
//I am filling up IP and PORT1 here  
expect -c "    
set timeout -1  
spawn telnet $IP $PORT1  
sleep 1  
send \"\r\"  
send \"\r\"  
set temp 1  
while( $temp == 1){    
expect {  
Prompt1 { send \"command\" }  
Prompt2 {send \"Yes\"; set done 0}  
}  
}  
"  

Выход:

invalid command name "while("  
    while executing  
"while( == 1){" 

Пожалуйста, помогите мне.
Я пытался изменить его на while [ $temp == 1] {

Я все еще сталкиваюсь с ошибкой ниже:

Выход:

invalid command name "=="  
    while executing  
"== 1"  
    invoked from within  
"while [  == 1] {  
expect {

Ответы [ 2 ]

11 голосов
/ 21 апреля 2011

Вот как я бы это реализовал:

expect -c '
  set timeout -1  
  spawn telnet [lindex $argv 0] [lindex $argv 1]  
  send "\r"  
  send "\r"  
  expect {  
    Prompt1 {
      send "command"
      exp_continue
    }  
    Prompt2 {
      send "Yes\r"
    }  
  }  
}  
'  $IP $PORT1
  • использование одинарных кавычек вокруг ожидаемого сценария для защиты ожидаемых переменных
  • передача переменных оболочки в качестве аргументов сценарию.
  • использовать "exp_continue" для цикла вместо явного цикла while (в любом случае у вас неверное имя завершающей переменной)
4 голосов
/ 21 апреля 2011

Синтаксис для while это "while test body". Должен быть интервал между каждой из этих частей, поэтому вы получаете сообщение об ошибке «no such command while)»

Кроме того, из-за правил цитирования tcl 99,99% времени теста должно быть в фигурных скобках. Итак, синтаксис:

while {$temp == 1} {

Для получения дополнительной информации см. http://tcl.tk/man/tcl8.5/TclCmd/while.htm

(возможно, у вас есть другие проблемы, связанные с выбором кавычек оболочки; этот ответ отвечает на ваш конкретный вопрос об утверждении while)

...