無意中發現了一個很好的軟件測試網站,忍不住分享一下給大家。覺得很實用,所以分享給大家。點這裏可以跳轉到教程。
expect定義及使用場景
expect是一個免費的編程工具,用來實現自動的交互任務。在實際工作中,在linux運行linux命令、腳本或程序時,這些輸入有時會需要人工手進行,而利用expect,可以根據程序的提示,模擬標註輸入提供給程序,從而實現自動化交互。
expect安裝
配置好對應的yum源之後,執行命令:
yum install -y expect
安裝成功之後,可以在命令行執行命令檢驗:expect -div
expect常用的四個命令
-
send
接收一個字符串參數,並將參數發送到進程。示例如下:
send "yes\n"
輸入一個yes並換行。 -
expect
通常用來等待一個進程的反饋,根據進程的反饋,再發送對應的交互式命令:
expect "*assword:" { send "123456\n"}
當出現的響應信息帶有assword:,通過send命令傳入“123456”然後換行。 -
spawn
用來啓動新的進程,spwan後的send和expect命令都是和使用spawn打開的進程進行交互。示例如下:
spawn ssh-copy-id -f $user_hostname expect { "(yes/no)?" { send "yes\n" expect "*assword:" { send "$password\n"} } "*assword:" { send "$password\n" } }
該段命令的作用是:啓動一個ssh-copy-id進程,把當前服務的ssh認證文件複製到對應的user_hostname,實現當前服務於user_hostname 進行免密操作。
-
interact
允許用戶進行交互。
實例講解
下面通過參數輸入進行ssh-copy-id腳本autosshcopyid.exp內容如下:
#!/usr/bin/expect
set timeout 10
set user_hostname [lindex $argv 0]
set password [lindex $argv 1]
spawn ssh-copy-id -f $user_hostname
expect {
"(yes/no)?"
{
send "yes\n"
expect "*assword:" { send "$password\n"}
}
"*assword:"
{
send "$password\n"
}
}
#!/usr/bin/expect
:表示使用expect來解釋該腳本。
set timeout 10
:設置超時時間,單位是秒,默認情況下是10秒。
set user_hostname [lindex $argv 0]
:把第一個參數傳遞給給user_hostname 變量。
set password [lindex $argv 1]
:把第二個參數傳遞給password 變量。
spawn ssh-copy-id -f $user_hostname
: 啓動新的進程ssh-copy-id,並獲取進程user_hostname。
expect {
"(yes/no)?" #如果匹配(yes/no)?
{
send "yes\n" #通過send命令輸入"yes"並換行
expect "*assword:" #如果字符串匹配assword:
{
send "$password\n" #通過send命令輸入命令設置的密碼並換行
}
}
"*assword:" #如果匹配assword?
{
send "$password\n" #通過send命令輸入命令設置的密碼並換行
}
}