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