expect是一個用來處理交互的命令。藉助於expect我們可以把交互過程寫在一個腳本上,使之自動化完成。
expect最核心的四個命令:
send:用於向進程發送字符串 except:從進程接收字符串 spawn:打開一個新的進程 interact:保持交互的狀態
首先一個簡單的腳本:
#!/usr/bin/expect #定義解釋器和shell一樣 set user [lindex $argv 0] #定義變量 set host [lindex $argv 1] # set passwd "8023jun12" spawn ssh $user@$host #打開一個ssh進程 expect "password:" #捕捉到“password:"字符串時,調用send發送字符串 send "$passwd\r" interact #ssh登錄後保持登錄狀態,若沒有此語句腳本執行完之後就會返回
執行腳本:
[root@slave expect]# ./1.sh root 192.168.1.120 spawn ssh [email protected] [email protected]'s password: Last login: Tue Dec 27 07:27:07 2016 from slave [root@master ~]#
可以設置超時時間:
set timeout 100:設置超時時間爲100秒,如果要執行的shell命令很長可以設置超時時間長一些。expect超過超時時間沒有監測到要找的字符串,則不執行,默認timeout爲10秒
expect的命令行參數
[lindex $argv n]獲得index爲n的參數(index從0開始計算) $argc爲命令行參數的個數 [lrange $argv 0 0]表示第一個參數 [lrange $argv 0 3]表示第1到第3個參數