For loop Expect for循环不起作用

For loop Expect for循环不起作用,for-loop,sh,expect,For Loop,Sh,Expect,我无法理解expect for循环是如何工作的 我有我的密码: j=0 /usr/bin/expect << SSHLOGIN .......... for {set $j 0} {$j < 5} {incr $j 1} { expect { "*> " { send "$j\r" sleep 1 } } } ........... SS

我无法理解expect for循环是如何工作的

我有我的密码:

j=0
/usr/bin/expect << SSHLOGIN
..........
    for {set $j 0} {$j < 5} {incr $j 1} {
        expect {
        "*> " {
        send "$j\r"
        sleep 1
            }
            }
        }
...........
SSHLOGIN
j=0

/usr/bin/expectexpect是Tcl语言的扩展。Tcl语法对空格非常敏感。您没有在
for
命令的参数之间提供空格

for {set j 0} {$j < 5} {incr j} {
#............^........^
如果是,请注意,在expect启动之前,必须保护expect的变量不被shell替换。如果可能,用单引号将expect程序括起来


这样做:

/usr/bin/expect << 'SSHLOGIN'

我更新了一个问题,说明了如何使用expect。空间没有帮助。但是这个网页真的很有帮助,我正在尝试其他一些方法,我会让你知道的。这有点令人沮丧。我从'expect-c'中得到了相同的结果。“'我尝试了foreach,但仍然没有得到正确的结果…感谢它完成了任务。。。但是我想从Shell脚本中添加一些变量,这有点棘手。一些命令使用name的想法帮助我欺骗了循环。而不是关闭$variables中的expect部分,如'SSHLOGIN'。我刚刚写了这样一个循环:{set j 0}{[incr j 0]<5}{incr j}
incr
使用名称并返回相同的值,而无需到Shell脚本外部查找变量。您也可以使用
[set j]
返回j的值。我认为Tcl的早期版本实际上没有
$j
语法,因为功能是由set命令提供的。
expect -c " ... your expect program here ..."
/usr/bin/expect << 'SSHLOGIN'
for {set  j 0} {$j < 5} {incr  j 1} {
# .......^....................^
#       no $                no $