expect 基礎語法學習 及 簡單使用

expect 我們可以理解爲一個可以提供自動化交互的工具,無需人的干預。
expect需要TCL變成語言的支持。



基本語法


for循環

格式:

for 空格 { 設置變量初始值 } 空格 { 條件判斷 } 空格 {設置增量 } 空格 {
}

示例:

for { set i 0 } {$i < 2} { incr i } {
	puts "num is $i"
}

輸出:

num is 0
num is 1

send:接收一個字符串參數,將參數發送到進程
expect:和send相反,根據進程輸出的反饋,再發送(send)對應的交互命令或者進行其他的操作(可以理解爲等待輸出中輸入特定的字符,然後發出特定的響應)
spawn:啓動新的進程,spawn後的send和expect命令都是和使用spawn打開的進程進行交互
interact:允許用戶交互。退出自動化,進入人工交互。
exp_continue:當執行完一個匹配時候,還可以繼續執行匹配,如果沒有exp_continue,匹配一次之後就會結束然後退出
$argc:表示參數個數,參數值存放在$argv中,比如取第一個參數就是[lindex $argv 0]


expect 使用示例

可以用expect來ssh遠程登錄服務器,就不需要每次自己輸入密碼(如下:例子二);
我們要根據用戶不同的選項執行不同的操作,可以提供用戶一個交互的輸入(如下:例子一)


示例一:可以實現與用戶交互,根據不同的選擇,執行不同的操作的小例子

[danni@vm-xxx-18 expect5.45.3]$ cat Demo1.sh 
#!/usr/local/bin/expect

# send:向進程發送字符串
# expect:從進程接收字符串
# exp_continue:當執行完一個匹配時候,還可以繼續執行匹配,如果沒有exp_continue,匹配一次之後就會結束然後退出

send "1:開啓,2:關閉\n"
expect {
    "1" 
    {
        send "哈哈開啓了\n"
        exp_continue
    }
    "2" 
    {
        send "呦呦關閉了\n"
        exp_continue
    }
    "quit"
    {
        exit
    }
}

執行結果:

[danni@vm-xxx-18 expect5.45.3]$ expect Demo1.sh 
1:開啓,2:關閉
1
哈哈開啓了
2
呦呦關閉了
1
哈哈開啓了
2
呦呦關閉了
1
哈哈開啓了
1
哈哈開啓了
quit
[danni@vm-xxx-18 expect5.45.3]$ 


傳入參數的示例——————實現一個使用ssh遠程登錄的小例子
一般情況下,遠程登錄的時候都會人工交互性的要你輸入密碼,有的時候我們不想手動輸入的時候,如何進行自動化操作呢?
expect可以幫我們實現,傳入要登錄的遠端linux的ip,user,password,使用expect實現自動登錄,通過spawn開啓一個新的進程,當進程輸出password的時候,我們就給進程send我們要輸入的password,即可實現自動的連接。
$argc:表示參數個數,參數值存放在$argv中,比如取第一個參數就是[lindex $argv 0]
interact如果沒有這一句,在登錄完成後就會退出,而不是留在遠程終端上

[danni@vm-xxx-18 expect5.45.3]$ cat Demo2.sh 
#!/usr/local/bin/expect

if {$argc < 3} {
    puts "Usage:cmd <host> <username> <password>"
    exit 1
}

# 通過set設置變量
set host [lindex $argv 0]
set username [lindex $argv 1]
set password [lindex $argv 2]

# 通過spawn開啓一個新的進程,接下來的expect和send都是針對於新的進程
spawn ssh $username@$host
expect "*password*" {send "$password\r"}
interact
# interact:如果沒有這一句,在登錄完成後就會退出通過spawn開啓的新進程,而不是留在遠程終端上

執行結果:

[danni@vm-xxx-18 expect5.45.3]$ expect Demo2.sh 192.168.3.236 danni danni
spawn ssh [email protected]
[email protected]'s password:
[danni@vm-xxx-18 ~]$ 


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章