我在bash中使用expect。我希望我的脚本telnet到一个框中,期待一个提示,发送一个命令。如果现在有不同的提示,则必须继续,否则它必须再次发送该命令。 我的脚本是这样的:
\#!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 {
答案 0 :(得分:11)
这就是我实现这个的方法:
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
答案 1 :(得分:4)
while的语法是“while test body”。每个部分之间必须有一个spce,这就是为什么你得到错误“没有这样的命令而”)
另外,由于tcl引用规则,99.99%的时间需要在大括号中进行测试。所以,语法是:
while {$temp == 1} {
有关详细信息,请参阅http://tcl.tk/man/tcl8.5/TclCmd/while.htm
(您可能还有其他与您选择shell引用相关的问题;此答案解决了您对while语句的具体问题)