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?root@192.168.1.120
root@192.168.1.120'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個參數
轉載于:https://blog.51cto.com/zidingyi/1887482