expect 是一個交互語言,用來實現自動和交互式任務進行通信,無需人的手工干預
例如密碼交互
expect 通過 spawn 啟動進程 -》 expect 獲取期待關鍵字 -》 send 向進程發送字符串
下面是一個簡單的交互案例
1 #!/usr/bin/expect -re
2 set timeout -1
3 set USERNAME %(userName)s
4 set PASSWORD %(password)s
5
6 spawn %(svn_commend)s
7
8 expect {
9 -re "sername" {exp_send "$USERNAME\r"; exp_continue}
10 -re "yes/no" {exp_send "no\r"; }
11 -re "Password for" {exp_send "$PASSWORD\r"; exp_continue}
12 }
13 expect eof
14 exit
1. #!/usr/bin/expect -re
告訴操作系統腳本里的代碼使用那一個shell來執
-re 表示啟用正則表達匹配
2. set timeout -1
設置超時時長 -1 代表永不過期
3. exp_continue
表示循環匹配。匹配到改關鍵字后繼續從頭開始匹配。例如安裝軟件時需要輸入多個 yes
4. expect eof
匹配結尾 例如執行命令結束時則可以匹配到 eof
5. exit、interact
exit交互結束退出。 interact表示執行完后保持交互狀態,把控制權交給控制台,這個時候就可以手工操作了
6. exp_send/send
都是想程序發送字符串,有啥區別還沒找到
7. send_user
send_user 命令用來把后面的參數輸出到標准輸出中去,默人的send、exp_send 命令都是將參數輸出到程序中去的,
8.如何使用
mac 上直接使用 ./XX.sh 執行上述腳本不行。需要使用 expect XX.sh 才能正確執行
9.調試
expect -d XX.sh輸出每次執行的過程可以用於編寫腳本時調試之用