LINUX expect實例講解

無意中發現了一個很好的軟件測試網站,忍不住分享一下給大家。覺得很實用,所以分享給大家。點這裏可以跳轉到教程。

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命令輸入命令設置的密碼並換行
        }
    }
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章