expect 的簡單學習與使用

背景

最近工作中總有很多重複的事項.
比較繁瑣,想着能夠簡單一點是一點的角度
準備採用expect來建華部分工作量.
其實還可以使用其他方式來處理.
但是感覺expect還是能夠簡單明瞭的.
所以暫時不引入python這麼重的工具

簡介

Expect是一個免費的編程工具語言,用來實現自動和交互式任務進行通信,而無需人的干預。
Expect的作者Don Libes在1990年 開始編寫Expect時對Expect做有如下定義:
Expect是一個用來實現自動交互功能的軟件套件 
(Expect [is a] software suite for automating interactive tools)。
使用它系統管理員 的可以創建腳本用來實現對命令或程序提供輸入,
而這些命令和程序是期望從終端(terminal)得到輸入,
一般來說這些輸入都需要手工輸入進行的。 
Expect則可以根據程序的提示模擬標準輸入提供給程序需要的輸入來實現交互程序執行。
甚至可以實現實現簡單的BBS聊天機器人。 :)

下載與安裝

CentOS,OpenEuler,Anolis
都可以使用
yum install expect -y 的方式進行安裝.
如果是不聯網的機器
可以使用 yum install yum* -y
然後yumdownloader expect  的方式下載rpm包便於安裝.
我這邊下載好的介質主要有:
expect-5.45-14.el7_1.x86_64.rpm
expect-5.45.4-3.ky10.aarch64.rpm
expect-5.45.4-6.oe2203.x86_64.rpm

expect 的命令寫法

expect有四個核心的指令:
spawn:     啓動新進程,後跟新進程要執行的指令;
expect:   指定要監聽的字符串,如果spawn進程返回了匹配的字符串
          (如標準輸入的提示信息),則觸發send;
send:     發送指定的字符串到spawn進程,代替標準輸入;
interact: 用戶參與交互;

注意還有一個 exp_continue 的命令,用於繼續等待一下次的輸入.
學習來源:https://www.jianshu.com/p/e70cb5979678

一個樣例

  • 場景是我要進行一個數據庫實例的註冊:
  • 注意我增加了一個sleep 4 避免啓動滿是無法處理.
  • 注意不同的數據庫的選項不一樣, 需要嚴格進行處理.
  • 注意輸入項目可以使用 \n或者是\r表示回車.前面不能有空格.
#!/usr/bin/expect
spawn ./startup-linux.sh
sleep 4
expect {
  "請選擇需要執行的操作" { send "3\n";exp_continue }

  "kingbase" { send "3\n";exp_continue }
  "請輸入數據庫服務器地址" { send "10.110.139.206\n";exp_continue }
  "請輸入數據庫服務器端口號" { send "1521\n";exp_continue }
  "請輸入數據庫服務名" { send "ora19cpdb\n";exp_continue }
  "請輸入數據庫賬戶名" { send "cloud2211\n";exp_continue }
  "請輸入數據庫密碼:" { send "Testxxxx?!\n";exp_continue }
  "是否繼續其他操作" { send "N\n" }
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章