安裝
expect是建立在tcl基礎上的一個自動化交互套件, 在一些需要交互輸入指令的場景下, 可通過腳本設置自動進行交互通信. 其交互流程是:
spawn啟動指定進程 -> expect獲取指定關鍵字 -> send想指定進程發送指定指令 -> 執行完成, 退出.
由於expect是基於tcl的, 所以需要確保系統中安裝了tcl:
# 檢查是否安裝了tcl:
[root@localhost ~]# whereis tcl
tcl: /usr/lib64/tcl8.5 /usr/include/tcl.h /usr/share/tcl8.5
# 如果沒有安裝, 使用yum安裝tcl和expect:
[root@localhost ~]# yum install -y tcl
[root@localhost ~]# yum install -y expect
# 查看expect的安裝路徑:
[root@localhost ~]# command -v expect
/usr/bin/expect
mac端安裝expect
下載tcl,expect
配置tcl
sudo cp tcl8.4.20-src.tar.gz /usr/local/ &&
cd /usr/local/ &&
sudo tar -zxvf tcl8.4.20-src.tar.gz &&
cd tcl8.4.20 &&
cd unix &&
sudo ./configure --prefix=/usr/local/tcl --enable-shared &&
sudo make &&
sudo make install &&
sudo cp ./tclUnixPort.h ../generic/
安裝expect
sudo cp expect5.45.4.tar.gz /usr/local/ &&
cd /usr/local/ &&
sudo tar -zxvf expect5.45.4.tar.gz &&
cd expect5.45.4 &&
sudo ./configure --prefix=/usr/local/expect --with-tcl=/usr/local/tcl/lib --with-tclinclude=/usr/local/tcl8.4.20/generic &&
sudo make &&
sudo make install
expect常用命令
spawn 啟動新的交互進程, 后面跟命令或者指定程序
expect 從進程中接收信息, 如果匹配成功, 就執行expect后的動作
send 向進程發送字符串
send exp_send 用於發送指定的字符串信息
exp_continue 在expect中多次匹配就需要用到
send_user 用來打印輸出 相當於shell中的echo
interact 允許用戶交互
exit 退出expect腳本
eof expect執行結束, 退出
set 定義變量
puts 輸出變量
set timeout 設置超時時間
參數選項
-c
:執行腳本前先執行的命令,可多次使用。
-d
:debug模式,可以在運行時輸出一些診斷信息,與在腳本開始處使用exp_internal 1
相似。-D
:啟用交換調式器,可設一整數參數。-f
:從文件讀取命令,僅用於使用#!時。如果文件名為"-",則從stdin讀取(使用"./-"從文件名為-的文件讀取)。-i
:交互式輸入命令,使用"exit"或"EOF"退出輸入狀態。--
:標示選項結束(如果你需要傳遞與expect選項相似的參數給腳本時),可放到#!
行:#!/usr/bin/expect --
。-v
:顯示expect版本信息。
四個命令
Expect中最關鍵的四個命令是send,expect,spawn,interact。
send:用於向進程發送字符串
expect:從進程接收字符串
spawn:啟動新的進程
interact:允許用戶交互