expect 脚本中的 if then 语句

问题描述 投票:0回答:1

因此,我尝试将文件从多台本地计算机 scp 到驱动器。但是,并非所有这些计算机之前都连接到该服务器。因此,有时机器在之前连接时只会提示输入密码,有时机器会警告密钥指纹。到目前为止,我已经有了发送 scp 的脚本,我只需要有关变量的帮助。所以显然我的帖子不够清楚。这是我到目前为止所拥有的。

这就是我的期望

set timeout -1
spawn ./transfer
match_max 100000
expect -exact "\rThe authenticity of host '192.168.255.255 (192.168.255.255)' can't be established.\r
ED25519 key fingerprint is SHA256:jkladfsjklfjklfjklfjklfjklfdsjklfdsjkldfsjkl;fds\r
This key is not known by any other names\r
Are you sure you want to continue connecting (yes/no/\[fingerprint\])? "
send -- "yes\r"
expect -exact "yes\r
Warning: Permanently added '192.168.255.255' (ED234234) to the list of known hosts.\r\r
\r([email protected]) Password:"
send -- "123456\r"
expect eof

“自动预期”57L,2242B

有些机器已经添加了网络服务器。因此,期望“主机的真实性”将会失败,因为它只会要求输入密码。 我正在尝试弄清楚如何输入 Expect if,then 来查找“the authentcity”提示或只是一个密码。

我发现一篇文章说你可以将两个期望组合在一起,无论得到哪一个都会推动适当的响应?但我不确定如何正确格式化它。如何对期望进行分组,以便脚本在从未提示“主机的真实性”时不会感到困惑。

if-statement expect
1个回答
0
投票

expect
命令可以采用多种模式,您可以并行观察:

spawn ./transfer
expect {
    "Are you sure you want to continue connecting " {
        send -- "yes\r"
        exp_continue
    }
    "Password:" {
        send -- "123456\r"
    }
}
expect eof

exp_continue
“循环”回到同一个期望语句,因此它可以继续等待其中一种模式。

“密码”块不会继续,因此发送密码后,expect命令结束,然后等待进程结束。

© www.soinside.com 2019 - 2024. All rights reserved.