Bash

使用 IF 語句在期望中創建分支

  • September 29, 2022

我正在編寫一個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
...

我懷疑這就是您想要的:expect等待“prompt2”“prompt3”的命令

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

exp_continue基本上是一個循環:留在這個期望命令中並繼續尋找列出的模式。

“prompt3”沒有對應的動作,所以expect命令結束。

引用自:https://unix.stackexchange.com/questions/719157