成人午夜视频全免费观看高清-秋霞福利视频一区二区三区-国产精品久久久久电影小说-亚洲不卡区三一区三区一区

Shell編程中Expect免交互的示例分析-創(chuàng)新互聯(lián)

本篇文章給大家分享的是有關(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概述

Expect是建立在tcl基礎(chǔ)上的一個工具,Expect是用來進行自動化控制和測試的工具。主要解決shell腳本中不可交互的問題。對于大規(guī)模的Linux運維很有幫助
在Linux運維和開發(fā)中,我們經(jīng)常需要遠程登錄服務(wù)器進行操作,登錄過程是一個交互的過程,可能會需要輸入yes/no,password等信息。為了模擬這種輸入,可以使用Expect腳本。

基本命令

send:向進程發(fā)送字符串,用于模擬用戶的輸入

  • 該命令不能自動回車換行,一般要加\r(回車)

expect

  • expect的一個內(nèi)部命令,判斷上次輸出結(jié)果里是否包含指定的字符串,如果有則立即返回,否則就等待超時時間后返回

  • 只能捕捉由spawn啟動的進程的輸出

spawn:啟動進程,并跟蹤后續(xù)交互信息

interact:執(zhí)行完成后保持交互狀態(tài),把控制權(quán)交給控制臺

Timeout:指定超時時間,過期則繼續(xù)執(zhí)行后續(xù)指令

  • 單位是:秒

  • timeout -1 為永不超時

  • 默認情況下,timeout是10秒

exp_continue

  • 允許expect繼續(xù)向下執(zhí)行指令

send_user

  • 回顯命令,相當于echo

$argv 參數(shù)數(shù)組

  • Expect腳本可以接受從bash傳遞的參數(shù),可以使用[lindex $argv n]獲得,n從0開始,分別表示第一個,第二個,第三個...參數(shù)

Expect腳本必須以interact或expect eof結(jié)束,執(zhí)行自動化任務(wù)通常expect eof就夠了

  • expect eof是在等待結(jié)束標志。由spawn啟動的命令在結(jié)束時會產(chǎn)生一個eof標記,expect eof即在等待這個標記

Expect語法

單一分支語法

expect "password:" {send "mypassword\r";}

多分支模式語法

send命令不具備回車換行功能,一般要加\r或

expect "aaa" {send "AAA\r"}
expect "aaa" {send "AAA\r"}
expect "aaa" {send "AAA\r"}

只要匹配了aaa或bbb或ccc中的任何一個,執(zhí)行相應(yīng)的send語句后退出該expect語句

expect {
"aaa" {send "AAA\r"}
"bbb" {send "BBB\r"}
"ccc" {send "CCC\r"}
}

exp_continue表示繼續(xù)后面的匹配,如果匹配了aaa,執(zhí)行完send語句后還要繼續(xù)向下匹配bbb

expect {
"aaa" {send "AAA\r";exp_continue}
"bbb" {send "BBB\r";exp_continue}
"ccc" {send "CCC\r"}
}

-re參數(shù)表示匹配正則表達式

Expect執(zhí)行方式

直接執(zhí)行

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 ~]#

Expect執(zhí)行方式

嵌入執(zhí)行

#!/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.

案例1

創(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)成功更新。

案例2

利用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)

h5響應(yīng)式網(wǎng)站建設(shè)
稻城县| 修水县| 清河县| 噶尔县| 昌吉市| 上杭县| 天祝| 乌兰县| 噶尔县| 招远市| 万全县| 铜川市| 高青县| 安塞县| 巩义市| 崇礼县| 全南县| 曲水县| 抚松县| 公安县| 广元市| 洛南县| 嘉峪关市| 慈利县| 叙永县| 新疆| 太保市| 浙江省| 讷河市| 海林市| 罗源县| 繁昌县| 灌云县| 北川| 桃园县| 雷山县| 通城县| 农安县| 隆尧县| 老河口市| 饶平县|