shell編程expect免交互

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

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

一 : expect 概述

1.1 expect

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

二 : expect 安裝

2.1 掛載光盤

2.2 制作本地yum倉庫

2.3 執(zhí)行安裝命令

  • yum install expect -y
  • 系統(tǒng)在默認情況下是沒有安裝expect軟件,需要手動安裝

三 : expect基本命令

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

3.2 expect

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

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

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

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

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

  • 單位是:秒
  • timeout -1 為永不超時
  • 默認情況下,timeout是10s

3.6 exp_continue

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

3.7 send_user

  • 回顯命令,相當于echo

備注:

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

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

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

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

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

四 : expect 語法

shell編程expect免交互

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

  • \r   回車符

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

五 : experct 執(zhí)行方式

5.1 直接執(zhí)行

[root@localhost ~]# vim a.sh
#!usr/bin/ecpect    //expect二進制文件的路徑,
#設(shè)置環(huán)境
#超時時間
set timeout 9       //設(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 啟動命令
#匹配條件,捕捉
expect {        //按條件捕捉去send執(zhí)行
     "(yes/no)"
     {send "yes\r";exp_continue}
     "*passwor"
     {send "$password\r"}
}
#權(quán)限轉(zhuǎn)交控制臺
interact
[root@localhost ~]# chmod +x a.sh 
[root@localhost ~]# ./a.sh  $argv0 $argv1
  • interact不要寫在大括號里面

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

  • set兩個變量代表著傳參

  • 然后以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標志
   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é)束標志,這個EOF不能有空格
[root@localhost ~]# source b.sh 
  • java的全局變量指的是類文件為區(qū)域

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

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

  • EOF前后不能有空格

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

六 : expect 案例

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

  • 正常情況下的交互過程

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沒開,或者端口不對,或者防火墻限制

shell編程expect免交互

  • 沒有連接地址

shell編程expect免交互

  • 利用expect完成ssh登錄過程

shell編程expect免交互

6.3 利用expect完成ftp登錄過程

shell編程expect免交互

shell編程expect免交互

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

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

網(wǎng)頁標題:shell編程expect免交互
分享URL:http://muchs.cn/article34/gdigpe.html

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

廣告

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

小程序開發(fā)