expect簡易教程

expect命令是用於處理交互的。在實際應用中,咱們能夠將一些交互場景寫在腳本上,達到自動化的目的。mysql

下面先從一個例子入門。下面腳本主要功能是:遠程登錄192.168.1.1->鏈接mysql->切換數據庫->設置不自動提交。sql

#!/usr/bin/expect
spawn ssh -p 32200 192.168.1.1
send "mysql -uroot -p123456\r"
expect "mysql> "
send "use test\r"
send "set session autocommit=0;\r"
expect "mysql> "
interact

有興趣的話,能夠將上述代碼保存到一個可執行文件中,並使用expect file.exp的方式運行。數據庫

指令介紹:expect經常使用的指令分別有:spawn、send、expect、interact、set。bash

spawn:  用於啓動一個新的進程。session

​​​​​​​命令格式:spawn [spawn-args] program [program-args]

​​​​​​​一般咱們要經過spawn打開一個交互進程,如:ssh、ftp、scp之類,後面再經過send、expect命令與之交互。ssh

send:spa

命令格式:send [-flags] string

經過send指令向進程發送一個字符串。如:send "uname\r",向進程發送uname命令,要注意後面的"\r"表示回車的意思。命令行

expect:code

命令格式:expect [[-opts] pat1 body1] ... [-opts] patn [bodyn]
舉例:
expect {
  "a" {send "hello a\r"}
  "b" {send "exit\r"}
  -re "c|d" {send "use regex\r"}
}

expect一般用於等待進程返回字符串。 如:expect "hi\r"表示進程返回了hi的字符串,加上-re表示正則匹配。此外expect支持多分支模式,相似switch-case的方式。進程

interact:

表示容許用戶交互,進程停留在命令行狀態下,等待用戶進行操做。

注意:一般expect腳本是以expect eof或interact結束。前者表示自動化任務結束。 

set:

主要用來設置環境變量。如set timeout 30表示等待30秒結束。

命令參數:$argv

expect腳本能夠接受命令行傳過來的參數 。如:expect my.exp 1 2 3,能夠經過[lindex $argv n],得到相應的參數(n=0,1,2.....)。

相關文章
相關標籤/搜索