Linux expect用法介紹

1.expect是linux中一個交互命令,一般在 /usr/bin/expect路徑下,如果該路徑未加入到環境中需要先添加,其作用場景常用於交互執行輸入指令

 

常用命令:
expect              獲取上一命令執行後的返回資訊,如果匹配成功 則執行後續操作
spawn               交互程式開始後面跟命令
set                 定義變數
puts                輸出變數
set timeout         設置超時時間
send               用於發送字元串或者命令
exit                退出expect腳本
eof                 expect執行結束 退出
interact            結束

 

2.實例

需求1描述:在沒有ssh密鑰認證時,scp遠程複製到目標主機需要每次輸入密碼,這裡使用expect免去手動輸入密碼的操作

主流程腳本:

#!/bin/sh
expect /home/sendUtil.sh 參數1  參數2  參數3  參數4
遠程複製scp腳本:
#!/usr/bin/expect
#獲取參數並設置局部變數
set timeout  15
set BASE_PATH [lindex $argv 0]
set FILE_NAME [lindex $argv 1]
set IP [lindex $argv 2]
set TARGET_PATH [lindex $argv 3]
#執行scp操作 spawn scp
-P 16022 ${BASE_PATH}/target/$FILE_NAME user@$IP:$TARGET_PATH #匹配到輸入密碼提示
expect
"\*assword\*" #發送密碼
send
"Password\r" #結束交互
interact

需求1描述:在沒有ssh密鑰認證時,sftp到遠程主機,切換到指定目錄,並將目錄下所有文件下載到本地

主腳本和上面一樣

 sftp腳本:

#!/usr/bin/expect
spawn sftp -oPort=16022 [email protected]
expect "\*assword\*"
send "Password\r"
expect "\*sftp\*"
send "cd /user/download\r"
expect "\*sftp\*"
send "get -r *\r"
interact