使用 IF 语句在 Expect 中创建分支

使用 IF 语句在 Expect 中创建分支

我正在编写一个expect脚本来处理过多的提示。

bash我正在使用的脚本可以遵循以下两个顺序之一:

  1. prompt1 -> prompt2 -> prompt3
  2. prompt1 -> prompt3

也就是说,有时我不明白prompt2。因此,我的问题是:如何编写一个expect脚本来检查prompt2,如果存在,则发送 ay并进一步继续,否则它只会继续。

编辑:感谢@glenn 的输入和答案!我会尽力使问题更清楚,以防将来对其他人有所帮助。我正在处理的特定bash脚本是从服务器下载一些数据。通常,当我执行脚本时会发生以下情况:

Do you want to download data from *server name*?
y
Do you want to download data from *some directory within server*?
y
...

然而,有时,当我执行这个脚本时,我还没有连接到服务器。因此,我在脚本中包含了一部分,用于检查我是否已连接到服务器。如果我没有,它会给我另一个提示,如下所示:

Do you want to download data from *server name*?
y
Looks like you are not connected to *server name*! Want to connect now?
y
Do you want to download data from *some directory within server*?
y
...

答案1

我怀疑这就是你想要的:expect等待的命令任何一个“提示2”或者“提示3”

expect "prompt1"
send "answer to prompt1\n"
expect {
    "prompt2" {send "y\n"; exp_continue}
    "prompt3"
}
send "answer to prompt3\r"

exp_continue基本上是一个循环:保留在这个expect命令中并继续寻找列出的模式。

“prompt3”没有相应的动作,因此expect命令结束。

相关内容