Linux下expect命令的部署安裝

備註:此博客爲轉載,方便自己學習Linux下shell腳本學習,原作者博客請點擊此處

expect是一個免費的編程工具語言,用來實現自動和交互式任務進行通信,而無需人的干預。

expect需要Tcl編程語言的支持,要在系統上進行ecpect必須首先安裝Tcl。

安裝

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

# whereis expect
  • 1

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
  • 1
  • 2
  • 3
  • 4
  • 5

然後下載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
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

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

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

# expect
expect1.1> 
  • 1
  • 2

基本操作

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個參數。這裏argvargv爲傳入的參數,另外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結束就行了
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27

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

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