linux中Expect工具的安裝及使用方法


轉載

原文地址:https://blog.csdn.net/wangtaoking1/article/details/78268574

Expect是一個用來處理交互的工具,通常用於需要手動輸入數據的場景,可在腳本中使用expect來實現自動化。

安裝
首先查看系統中是否有安裝expect。

# whereis expect


Expect工具是依賴tcl的,所以也需要安裝tcl。

首先下載並安裝tcl,這里安裝8.4.19版本。

# wget https://sourceforge.net/projects/tcl/files/Tcl/8.4.19/tcl8.4.19-src.tar.gz
# tar zxvf tcl8.4.19-src.tar.gz
# cd tcl8.4.19/unix && ./configure
# make
# make install


然后下載expect並安裝。

# wget http://sourceforge.net/projects/expect/files/Expect/5.45/expect5.45.tar.gz
# tar zxvf expect5.45.tar.gz
# cd expect5.45
# ./configure --with-tcl=/usr/local/lib --with-tclinclude=../tcl8.4.19/generic
# make
# make install
# ln -s /usr/local/bin/expect /usr/bin/expect


注意這里的configure命令需要使用–with-tclinclude選項傳入tcl安裝包中的generic文件夾路徑。

安裝完成之后運行expect命令,查看是否安裝成功。

# expect
expect1.1> 


基本操作
Expect腳本中常用的命令包括spawn, expect, send, interact等。

spawn
該命令用於啟動一個子進程,執行后續命令

expect
該命令從進程接受字符串,如果接受的字符串和期待的字符串不匹配,則一直阻塞,直到匹配上或者等待超時才繼續往下執行

send
向進程發送字符串,與手動輸入內容等效,通常字符串需要以’\r’結尾。

interact
該命令將控制權交給控制台,之后就可以進行人工操作了。通常用於使用腳本進行自動化登錄之后再手動執行某些命令。如果腳本中沒有這一條語句,腳本執行完將自動退出。

set timeout 30
設置超時時間timeout為30s,expect命令阻塞超時時會自動往下繼續執行。將timeout配置為-1時表示expect一直阻塞直到與期待的字符串匹配上才繼續往下執行。超時時間timeout默認為10s。

[lindex $argv n]
可以在腳本中使用該命令獲取在腳本執行時傳入的第n個參數。這里argv為傳入的參數,另外argv為傳入的參數,另外argc表示傳入參數的個數,$argv0表示腳本名字。

另外我們也可以使用[lrange $argv sn en]命令獲取第sn到第en個參數。

實例解析
這里我們寫一個腳本,命名為restart_service.exp,該腳本先切換到指定賬戶,然后下載軟件包到tomcat的webapps目錄,然后重啟tomcat服務。

#!/usr/bin/expect

set timeout -1

set user [lindex $argv 0]
set password [lindex $argv 1]
set cmd_prompt "# "

spawn su ${user}
expect ${cmd_prompt}
send "${password}\r"

expect ${cmd_prompt}
send "cd /opt/tomcat/webapps && wget http://host/path/to/package.war\r"
expect "100%"
# 直到wget下載任務打印出100%才表示軟件包下載完成

expect ${cmd_prompt}
send "/opt/tomcat/bin/shutdown.sh\r"

expect ${cmd_prompt}
send "/opt/tomcat/bin/startup.sh\r"

expect eof
#interact

# 所有腳本必須以expect eof或者interact結束,一般自動化腳本以expect eof結束就行了

運行expect restart_service.exp tomcat tomcat123命令,腳本將使用tomcat賬戶下載軟件包並重啟tomcat服務。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM