您好,登錄后才能下訂單哦!
這篇文章給大家介紹shell腳本中免交互工具ecpect是怎樣用的,內容非常詳細,感興趣的小伙伴們可以參考借鑒,希望對大家能有所幫助。
Expect概述
Expect是建立在tcl基礎上的一個工具,Expect是用來進行自動化控制和測試的工具。主要解決shell腳本中不可交互的問題。對于大規模的Linux運維很有幫助。
在Linux運維和開發中,我們經常需要遠程登錄服務器進行操作,登錄的過程是一個交互的過程,可能需要輸入yes/no、password等信息。為了模擬這種輸入,可以使用Expect腳本。
Expect安裝
yum install expect -y 安裝expect服務
Expect基本命令
1.send:向進程發送字符串,用于模擬用戶的輸入
該命令不能自動回車換行,一般要加\r (回車)
2.expect
expect的一個內部命令,判斷上次輸出的結果里是否包含指定的字符串,如果有則立即返回,否則就等待超時時間后返回。
只能捕捉spawn啟動的進程的輸出。
3.spawn:啟動進程,并跟蹤后續交互信息。
4.interact:執行完成后保持交互狀態,把控制權交給控制臺
5.Timeout:指定超時時間,過去則繼續執行后續指令
單位是:秒
timeout -1 為永不超時
默認情況下,timeout是10秒
6.exp_continue
允許expect繼續向下執行
7.send_user
回顯命令,相當于echo
8.$argv 參數數組
expect腳本可以接受從bash傳遞的參數,可以使用【lindex,$argv n】獲得,n從0開始,分別表示第一個、第二個。。。
9.Expect腳本必須以interact或expect eof結束,執行自動化任務通常expect eof就夠了
expect eof 是在等待結束標志,由spawn啟動的命令在結束時會產生一個eof標記,expect eof就是在等待這個標記。
Expect語法
單一語法分支
expect “password” {send “mypassword”;}
多分支語法結構
expect { "aaa"{send "AAA\r"} "bbb"{send "BBB\r"} "ccc"{send "CCC\r"} }
示例:
1.利用expect 完成ssh登錄過程
(1)直接執行
#!/usr/bin/expect set timeout 60 #環境設置 log_flie test.log log_user 1 #變量定義 set hostname [lindex $argv 0] set password [lindex $argv 1] #啟動spawn spawn ssh root@$hostname #匹配條件 expect { "(yes/no)" {send "yes\r";exp_continue} "password" {send "$password\r"} } #權限轉交控制臺 interact
(2)嵌入執行
#!/bin/bash hostname=$1 password=$2 /usr/bin/expect<<-EOF spwan ssh root@${hostname} expect{ "(yes/no)" {send "yes\r";exp_continue} "*password" {send "password\r"} } expect "*]#" send "exit\r" expect eof EOF
2.創建用戶tom,密碼tom123
#!/bin/bash user=$1 password=$2 useradd=$user expect<<-EOF spawn passwd $user expect { "New password:" send "${password}\r" "Retype new password:" send "${password}\r" } ecpect eof EOF
關于shell腳本中免交互工具ecpect是怎樣用的就分享到這里了,希望以上內容可以對大家有一定的幫助,可以學到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。