欧美一区二区三区老妇人-欧美做爰猛烈大尺度电-99久久夜色精品国产亚洲a-亚洲福利视频一区二区

Shell編程之Expect免交互語(yǔ)句詳解-創(chuàng)新互聯(lián)

Expect概述

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

創(chuàng)新互聯(lián)建站專(zhuān)注于企業(yè)成都營(yíng)銷(xiāo)網(wǎng)站建設(shè)、網(wǎng)站重做改版、大箐山網(wǎng)站定制設(shè)計(jì)、自適應(yīng)品牌網(wǎng)站建設(shè)、H5響應(yīng)式網(wǎng)站商城網(wǎng)站定制開(kāi)發(fā)、集團(tuán)公司官網(wǎng)建設(shè)、外貿(mào)網(wǎng)站建設(shè)、高端網(wǎng)站制作、響應(yīng)式網(wǎng)頁(yè)設(shè)計(jì)等建站業(yè)務(wù),價(jià)格優(yōu)惠性?xún)r(jià)比高,為大箐山等各大城市提供網(wǎng)站開(kāi)發(fā)制作服務(wù)。

Expect安裝

yum install expect -y

基本命令

send:

向進(jìn)程發(fā)送字符串,用于模擬用戶的輸入。該命令不能自動(dòng)回車(chē)換行,一般要加\r (回車(chē))

expect:

expect的一個(gè)內(nèi)部命令,判斷上次輸出結(jié)果里是否包含指定的字符串,如果有則立即返回,否則就等待超時(shí)時(shí)間后返回。只能捕捉由spawn啟動(dòng)的進(jìn)程的輸出。

spawn:

啟動(dòng)進(jìn)程,并跟蹤后續(xù)交互信息。

interact:

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

Timeout:

指定超時(shí)時(shí)間,過(guò)期則繼續(xù)執(zhí)行后續(xù)指令;
單位是:秒;
timeout -1為永不超時(shí);
默認(rèn)情況下,timeout是10秒。

exp_ continue:

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

send_ user:

回顯命令,相當(dāng)于echo

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

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

expect eof:

Expect腳本必須以interact或expect eof結(jié)束,執(zhí)行自動(dòng)化任務(wù)通常expect eof就夠了,expect eof是在等待結(jié)束標(biāo)志。由spawn啟動(dòng)的命令在結(jié)束時(shí)會(huì)產(chǎn)生一個(gè)eof標(biāo)記,expect eof即在等待這個(gè)標(biāo)記。

Expect語(yǔ)法

單一分支語(yǔ)句

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

多分支模式語(yǔ)法

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

send命令不具備回車(chē)換行功能,一般要加\r或\n。

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

只要匹配上了任何一個(gè),執(zhí)行項(xiàng)硬的send語(yǔ)句后退出該expect語(yǔ)句。

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

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

Expect執(zhí)行方式

直接執(zhí)行:

通過(guò)執(zhí)行腳本直接免交互進(jìn)行ssh登錄

[root@localhost opt]# vim demo01.sh 

#!/usr/bin/expect                                         //Expect二進(jìn)制文件的路徑
set timeout 20                                            //超時(shí)時(shí)間20,單位:秒
log_file test.log                                         //日志文件
log_user 1                                                //日志用戶個(gè)數(shù)
set hostname [lindex $argv 0]
set password [lindex $argv 1]              //定義變量,通過(guò)參數(shù)將內(nèi)容傳入,類(lèi)似于位置變量
spawn ssh root@$hostname              //追蹤命令
expect {
                "Connection refused" exit           //捕捉服務(wù)被拒絕信息,并執(zhí)行exit退出免交互
                "service not konwn" exit             //捕捉未知服務(wù)或連接地址錯(cuò)誤的信息,并執(zhí)行exit退出免交互
        "(yes/no)"                                     //捕捉詢(xún)問(wèn)是否連接的的信息
        {send "yes\r";exp_continue}     //輸入"yes",回車(chē),并繼續(xù)進(jìn)行匹配
        "*password"                                //捕捉密碼輸入的信息
        {send "$password\r"}                //通過(guò)變量輸入密碼,回車(chē),不繼續(xù)匹配。
}
interact                                               //保持交互狀態(tài),把控制權(quán)交給控制臺(tái)

嵌入執(zhí)行:

通過(guò)腳本創(chuàng)建用戶,再免交互給用戶設(shè)置密碼。

[root@localhost opt]# vim demo02.sh

#!/bin/bash
user=$1                                                                          //定義位置變量$1為user
password=$2                                                                //定義位置變量$2為password
useradd $user                                                              //添加用戶
/usr/bin/expect <<-EOF                                              //Expect開(kāi)始標(biāo)志,標(biāo)準(zhǔn)性輸入,等同于stdin
spawn passwd $user
expect {
        "新的 密碼:"
        {send "$password\r";exp_continue}
        "重新輸入新的 密碼:"
        {send "$password\r"}
}
EOF                                                                           //Expect結(jié)束語(yǔ)句,EOF前后不能有空格

另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)cdcxhl.cn,海內(nèi)外云服務(wù)器15元起步,三天無(wú)理由+7*72小時(shí)售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國(guó)服務(wù)器、虛擬主機(jī)、免備案服務(wù)器”等云主機(jī)租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡(jiǎn)單易用、服務(wù)可用性高、性?xún)r(jià)比高”等特點(diǎn)與優(yōu)勢(shì),專(zhuān)為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場(chǎng)景需求。

當(dāng)前文章:Shell編程之Expect免交互語(yǔ)句詳解-創(chuàng)新互聯(lián)
URL地址:http://chinadenli.net/article34/dosdse.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站導(dǎo)航、面包屑導(dǎo)航用戶體驗(yàn)、網(wǎng)站建設(shè)手機(jī)網(wǎng)站建設(shè)、App開(kāi)發(fā)

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)

網(wǎng)站建設(shè)網(wǎng)站維護(hù)公司