中文字幕日韩精品一区二区免费_精品一区二区三区国产精品无卡在_国精品无码专区一区二区三区_国产αv三级中文在线

shell編程expect免交互

今天小編就為大家?guī)?lái)shell編程中expect免交互的文章。小編覺得挺不錯(cuò)的,為此分享給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧。

十余年的姑蘇網(wǎng)站建設(shè)經(jīng)驗(yàn),針對(duì)設(shè)計(jì)、前端、開發(fā)、售后、文案、推廣等六對(duì)一服務(wù),響應(yīng)快,48小時(shí)及時(shí)工作處理。營(yíng)銷型網(wǎng)站的優(yōu)勢(shì)是能夠根據(jù)用戶設(shè)備顯示端的尺寸不同,自動(dòng)調(diào)整姑蘇建站的顯示方式,使網(wǎng)站能夠適用不同顯示終端,在瀏覽器中調(diào)整網(wǎng)站的寬度,無(wú)論在任何一種瀏覽器上瀏覽網(wǎng)站,都能展現(xiàn)優(yōu)雅布局與設(shè)計(jì),從而大程度地提升瀏覽體驗(yàn)。創(chuàng)新互聯(lián)公司從事“姑蘇網(wǎng)站設(shè)計(jì)”,“姑蘇網(wǎng)站推廣”以來(lái),每個(gè)客戶項(xiàng)目都認(rèn)真落實(shí)執(zhí)行。

一 : expect 概述

1.1 expect

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

二 : expect 安裝

2.1 掛載光盤

2.2 制作本地yum倉(cāng)庫(kù)

2.3 執(zhí)行安裝命令

  • yum install expect -y
  • 系統(tǒng)在默認(rèn)情況下是沒(méi)有安裝expect軟件,需要手動(dòng)安裝

三 : expect基本命令

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

3.2 expect

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

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

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

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

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

  • 單位是:秒
  • timeout -1 為永不超時(shí)
  • 默認(rèn)情況下,timeout是10s

3.6 exp_continue

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

3.7 send_user

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

備注:

  • 永不超時(shí)常用于網(wǎng)絡(luò)不穩(wěn)定時(shí)使用
  • shell腳本中的continue 指結(jié)束這次循環(huán),開始下一次循環(huán)
  • expect腳本中exp_continue指不會(huì)結(jié)束,繼續(xù)匹配下一行

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

  • expect 腳本可以接受從bash傳遞的參數(shù),可以使用[lindex $argv n]格式,去進(jìn)行獲得,n從0開始,分別表示第一個(gè),第二個(gè),第三個(gè)……參數(shù)
  • v 代表value 值,前面是固定格式
  • agv 與n 中間要有空格

3.9 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)記
  • 看到eof 即代表結(jié)束腳本

四 : expect 語(yǔ)法

shell編程expect免交互

  • expect “要捕捉的內(nèi)容” {send "要輸入的參數(shù)\r";}

  • \r   回車符

  • 沒(méi)有帶有exp_continue ,則匹配一次就推出,有的話就再往下執(zhí)行匹配一次
  • -re 參數(shù)表示匹配正則表達(dá)式

五 : experct 執(zhí)行方式

5.1 直接執(zhí)行

[root@localhost ~]# vim a.sh
#!usr/bin/ecpect    //expect二進(jìn)制文件的路徑,
#設(shè)置環(huán)境
#超時(shí)時(shí)間
set timeout 9       //設(shè)置超時(shí)時(shí)間
log_file test.log   //日志文件路徑
log_user 1          //用戶數(shù)量為1
#定義變量
set hostname [lindex $argv 0 ]
set password [lindex $argv 1 ]
#開啟追蹤spawn
spawn ssh root@$hostname    //spawn 啟動(dòng)命令
#匹配條件,捕捉
expect {        //按條件捕捉去send執(zhí)行
     "(yes/no)"
     {send "yes\r";exp_continue}
     "*passwor"
     {send "$password\r"}
}
#權(quán)限轉(zhuǎn)交控制臺(tái)
interact
[root@localhost ~]# chmod +x a.sh 
[root@localhost ~]# ./a.sh  $argv0 $argv1
  • interact不要寫在大括號(hào)里面

  • [gsy@localhost root]$ which expect
    /usr/bin/expect
  • 兩個(gè)log可加可不加

  • set兩個(gè)變量代表著傳參

  • 然后以spawn 去開啟服務(wù)

  • exprct 去捕捉條件,中間send輸出指令,\r回車,exp_continue繼續(xù)匹配

  • interact結(jié)束

5.2 嵌入執(zhí)行

[root@localhost ~]# vim b.sh 
#!/bin/bash
   hostname=$1
   password=$2
   /usr/bin/expect<<-EOF    //expect開始EOF標(biāo)志
   spawn ssh root@$hostname
   expect {
        "(yes/no)"
        {send "yes\r";exp_continue}
        "*password"
        {send "$password\r"}
   }
   expect "*]#"     //檢索是否以root登陸
   send "exit\r"
   expect eof
EOF     //exprct結(jié)束標(biāo)志,這個(gè)EOF不能有空格
[root@localhost ~]# source b.sh 
  • java的全局變量指的是類文件為區(qū)域

  • shell的是所有bash環(huán)境都能識(shí)別

  • /usr/bin/expect<<-EOF 也可以視為聲明expect 位置

  • EOF前后不能有空格

spawn :以spawn模式執(zhí)行操作,expect 才可以捕捉到

六 : expect 案例

6.1 創(chuàng)建用戶tom,密碼123123

  • 正常情況下的交互過(guò)程

shell編程expect免交互

  • 編寫shell腳本(嵌入方式)
[root@localhost ~]# vim b.sh 
#!/bin/bash
user=$1
mima=$2
/usr/bin/expect<<-EOF
spawn useradd $user
spawn passwd $user
expect {
  "New password"
  {send "$mima\r";exp_continue}
  "new password"
  {send "$mima\r"}
}
expect eof
EOF
[root@localhost ~]# chmod +x b.sh 
[root@localhost ~]# ./b.sh qqq 965483
spawn useradd qqq
spawn passwd qqq
Changing password for user qqq.
New password: 
BAD PASSWORD: The password is shorter than 8 characters
Retype new password: 
passwd: all authentication tokens updated successfully.
[root@localhost ~]# vim b.sh
[root@localhost ~]# id qqq
uid=1001(qqq) gid=1001(qqq) groups=1001(qqq)

shell編程expect免交互

6.2 ssh登錄

  • 首次登錄

shell編程expect免交互

  • 正常登錄

  • 連接被拒絕,可能是ssh沒(méi)開,或者端口不對(duì),或者防火墻限制

shell編程expect免交互

  • 沒(méi)有連接地址

shell編程expect免交互

  • 利用expect完成ssh登錄過(guò)程

shell編程expect免交互

6.3 利用expect完成ftp登錄過(guò)程

shell編程expect免交互

shell編程expect免交互

想要注釋多行語(yǔ)句  可以在首部輸入 :<<! 在尾部輸入!

以上就是shell編程expect免交互的方法介紹,詳細(xì)使用情況還得要大家自己使用過(guò)才能知道具體要領(lǐng)。如果想了解更多相關(guān)內(nèi)容,歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道!

網(wǎng)頁(yè)標(biāo)題:shell編程expect免交互
分享URL:http://www.rwnh.cn/article34/gdigpe.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供響應(yīng)式網(wǎng)站、標(biāo)簽優(yōu)化、網(wǎng)頁(yè)設(shè)計(jì)公司、建站公司、域名注冊(cè)、服務(wù)器托管

廣告

聲明:本網(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)

小程序開發(fā)
兰西县| 繁峙县| 星座| 上杭县| 巩义市| 林口县| 大名县| 平山县| 惠水县| 烟台市| 泽普县| 洛阳市| 雅安市| 淮阳县| 和平县| 闽清县| 滁州市| 康定县| 德保县| 芮城县| 栾城县| 鹤壁市| 大石桥市| 镶黄旗| 长岛县| 吉木乃县| 兰溪市| 离岛区| 牟定县| 娱乐| 克山县| 全州县| 大名县| 广饶县| 桃源县| 特克斯县| 德江县| 罗田县| 甘孜| 马鞍山市| 苏尼特右旗|