本篇文章給大家分享的是有關(guān)Shell編程中Expect免交互的示例分析,小編覺得挺實用的,因此分享給大家學(xué)習(xí),希望大家閱讀完這篇文章后可以有所收獲,話不多說,跟著小編一起來看看吧。
站在用戶的角度思考問題,與客戶深入溝通,找到煙臺網(wǎng)站設(shè)計與煙臺網(wǎng)站推廣的解決方案,憑借多年的經(jīng)驗,讓設(shè)計與互聯(lián)網(wǎng)技術(shù)結(jié)合,創(chuàng)造個性化、用戶體驗好的作品,建站類型包括:成都網(wǎng)站建設(shè)、做網(wǎng)站、企業(yè)官網(wǎng)、英文網(wǎng)站、手機端網(wǎng)站、網(wǎng)站推廣、申請域名、網(wǎng)頁空間、企業(yè)郵箱。業(yè)務(wù)覆蓋煙臺地區(qū)。Expect是建立在tcl基礎(chǔ)上的一個工具,Expect是用來進行自動化控制和測試的工具。主要解決shell腳本中不可交互的問題。對于大規(guī)模的Linux運維很有幫助
在Linux運維和開發(fā)中,我們經(jīng)常需要遠程登錄服務(wù)器進行操作,登錄過程是一個交互的過程,可能會需要輸入yes/no,password等信息。為了模擬這種輸入,可以使用Expect腳本。
該命令不能自動回車換行,一般要加\r(回車)
expect的一個內(nèi)部命令,判斷上次輸出結(jié)果里是否包含指定的字符串,如果有則立即返回,否則就等待超時時間后返回
只能捕捉由spawn啟動的進程的輸出
單位是:秒
timeout -1 為永不超時
默認情況下,timeout是10秒
允許expect繼續(xù)向下執(zhí)行指令
回顯命令,相當于echo
Expect腳本可以接受從bash傳遞的參數(shù),可以使用[lindex $argv n]獲得,n從0開始,分別表示第一個,第二個,第三個...參數(shù)
expect eof是在等待結(jié)束標志。由spawn啟動的命令在結(jié)束時會產(chǎn)生一個eof標記,expect eof即在等待這個標記
expect "password:" {send "mypassword\r";}
expect "aaa" {send "AAA\r"}
expect "aaa" {send "AAA\r"}
expect "aaa" {send "AAA\r"}
expect {
"aaa" {send "AAA\r"}
"bbb" {send "BBB\r"}
"ccc" {send "CCC\r"}
}
expect {
"aaa" {send "AAA\r";exp_continue}
"bbb" {send "BBB\r";exp_continue}
"ccc" {send "CCC\r"}
}
SSH登錄
首次登陸
正常登錄
連接被拒絕,可能ssh沒開,或端口號不對,亦或是防火墻限制
沒有該連接地址
#!/usr/bin/expect //Expect二進制文件的路徑 #超時時間 set timeout 20 //20秒等待時間 log_file test.log //日志文件 log_user 1 //日志用戶 #參數(shù)傳入 set hostname [lindex $argv 0] //追加參數(shù)0,統(tǒng)計變量并加載第1位置參數(shù) set password [lindex $argv 1] //追加參數(shù)1,統(tǒng)計變量并加載第2位置參數(shù) #追蹤命令 spawn ssh root@$hostname //追蹤命令 #捕捉信息并匹配免交互執(zhí)行 expect { //捕捉提示信息 "Connection refused" exit //捕捉到拒接連接信息即退出 "service not konwn" exit //捕捉到服務(wù)為開啟信息即退出 "(yes/no)" // 捕捉y(tǒng)es或no參數(shù) {send "yes\r";exp_continue} //輸入yes并繼續(xù)執(zhí)行 "*password" // 捕捉參數(shù) {send "$password\r"} //輸入密碼參數(shù) } #控制權(quán)交予控制臺 interact //控制權(quán)轉(zhuǎn)交控制臺人為輸入 [root@localhost ~]# ./expect.sh 192.168.109.132 baby520./ spawn ssh root@192.168.109.132 root@192.168.109.132's password: Last login: Thu Oct 10 16:52:48 2019 from 192.168.109.10 [root@localhost ~]#
#!/bin/bash user=$1 password=$2 #非交互命令放expect外面 useradd $user #開始交互 expect <<-EOF //Expect開始標志,標準性輸入,等同于stdin spawn passwd $user expect "新的*" send "$password\r" expect "重新*" send "$password\r" expect eof; EOF //Expect結(jié)束語句,EOF前后不能有空格 [root@localhost ~]# ./expect.sh 192.168.109.132 baby520./ spawn ssh root@192.168.109.132 root@192.168.109.132's password: Last login: Thu Oct 10 17:38:16 2019 from 192.168.109.133 [root@localhost ~]# exit 登出 Connection to 192.168.109.132 closed.
創(chuàng)建自定義用戶,密碼自定義
#!/bin/bash username=$1 password=$2 useradd $username /usr/bin/expect <<-EOF spawn passwd $username expect { "新的*" {send "$password\r";exp_continue} "重新*" {send "$password\r"} } EOF [root@localhost ~]# ./tom.sh test2 123123 spawn passwd test2 更改用戶 test2 的密碼 。 新的 密碼: 無效的密碼: 密碼少于 8 個字符 重新輸入新的 密碼: passwd:所有的身份驗證令牌已經(jīng)成功更新。
利用expect完成FTP登錄過程
#!/usr/bin/expect -f set timeout 20 spawn ftp 192.168.109.133 expect "Name*" send "ftp\r" expect "Password:*" send "\r" expect "ftp>*" interact expect eof
以上就是Shell編程中Expect免交互的示例分析,小編相信有部分知識點可能是我們?nèi)粘9ぷ鲿姷交蛴玫降?。希望你能通過這篇文章學(xué)到更多知識。更多詳情敬請關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道。
另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)cdcxhl.cn,海內(nèi)外云服務(wù)器15元起步,三天無理由+7*72小時售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國服務(wù)器、虛擬主機、免備案服務(wù)器”等云主機租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡單易用、服務(wù)可用性高、性價比高”等特點與優(yōu)勢,專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場景需求。
網(wǎng)頁名稱:Shell編程中Expect免交互的示例分析-創(chuàng)新互聯(lián)
網(wǎng)站路徑:http://jinyejixie.com/article40/ghgeo.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站策劃、網(wǎng)站內(nèi)鏈、手機網(wǎng)站建設(shè)、網(wǎng)站建設(shè)、網(wǎng)站維護、企業(yè)建站
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)