欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Linux自動化交互腳本expect從安裝到開發(fā)詳解

 更新時間:2024年06月29日 09:04:08   作者:IT后浪  
運行shell腳本有時會提示輸入密碼,如何讓腳本自動輸入密碼呢?這時使用expect,Expect是基于Tcl發(fā)展而來的,它不僅可以進行交互,還可以根據(jù)程序的提示模擬標(biāo)準(zhǔn)輸入,實現(xiàn)自動化交互執(zhí)行的功能,在排查expect腳本執(zhí)行問題時,應(yīng)關(guān)注腳本是如何被調(diào)用和執(zhí)行的

在日常開發(fā)任務(wù)中,運行shell腳本有時候會提示輸入密碼的操作,如何讓腳本自動輸入密碼呢?這時使用expect幫我們輸入,Expect是基于Tcl發(fā)展而來的,它不僅可以進行交互,還可以根據(jù)程序的提示模擬標(biāo)準(zhǔn)輸入,實現(xiàn)自動化交互執(zhí)行的功能。

expect使用場景

文件傳輸

  • FTP/SFTP/SCP文件傳輸過程中,如果服務(wù)要求輸入用戶名、密碼或接受安全警告等交互操作,expect可以幫助自動完成這些步驟。

SSH登錄自動化

  • 當(dāng)需要自動登錄遠程服務(wù)器并執(zhí)行一系列命令時,expect可以模擬用戶輸入密碼或通過密鑰認(rèn)證,并根據(jù)交互式提示繼續(xù)執(zhí)行。

sudo權(quán)限提升

  • 當(dāng)需要以root或其他用戶權(quán)限運行命令,而系統(tǒng)配置為每次使用sudo都需要輸入密碼時,可以通過expect預(yù)先輸入密碼并執(zhí)行后續(xù)命令。

數(shù)據(jù)庫操作

  • 在使用數(shù)據(jù)庫管理系統(tǒng)(如MySQL, PostgreSQL等)的命令行客戶端,在連接或執(zhí)行敏感操作時需要輸入密碼驗證,expect腳本能實現(xiàn)這一過程的自動化。

自動安裝程序

  • 在安裝軟件包或運行配置腳本的過程中,有些可能包含有交互式的問答環(huán)節(jié),expect可用來自動回答這些問題,使得安裝或配置過程完全自動化。

系統(tǒng)監(jiān)控任務(wù)

  • 在執(zhí)行緊急維護或故障恢復(fù)時,可能涉及一系列復(fù)雜的手動交互流程,通過expect編寫自動化腳本能夠減少人為干預(yù),提高效率和準(zhǔn)確性。

網(wǎng)絡(luò)設(shè)備管理

  • 對于路由器、交換機和其他網(wǎng)絡(luò)設(shè)備,很多管理界面都是基于文本協(xié)議(如telnet或SSH),expect可以用于自動登錄設(shè)備并執(zhí)行配置更改等任務(wù)。

總之,任何需要在命令行環(huán)境中進行人工交互的任務(wù),只要可以預(yù)測到交互的內(nèi)容,都可以嘗試使用expect來實現(xiàn)自動化處理。

安裝expect

查看是否安裝了expect

whereis expect

如果出現(xiàn)如下提示,說明未安裝

expect:[root@test ~]#

安裝expect

yum install -y expect

安裝成功提示

再次執(zhí)行whereis expect命令,如果出現(xiàn)如下提示,說明安裝成功

expect: /usr/bin/expect /usr/share/man/man1/expect.1.gz

編寫sudo提權(quán)腳本

以下是一個基本的expect腳本示例,它會自動為sudo命令提供密碼。

腳本內(nèi)容

#!/usr/bin/expect

# 設(shè)置超時時間(單位秒)
set timeout 10
# 設(shè)置你的密碼變量
set password "your_password_here"
# 執(zhí)行sudo命令,并監(jiān)視其輸出
spawn su root
# 當(dāng)提示符出現(xiàn)時,發(fā)送密碼
expect "*Password:"
send "$password\r"
# 交互模式,等待命令執(zhí)行完成
interact

腳本解釋

  • spawn su root 是啟動一個新的進程來運行su命令。
  • expect "*Password:" 等待包含"Password:"的提示符出現(xiàn)。
  • send "$password\r" 發(fā)送密碼變量值,并附帶回車符以確認(rèn)輸入。
  • interact 可以用來繼續(xù)監(jiān)控和處理命令行中的其他交互。

常用命令說明

命令

說明

set timeout n

設(shè)置expect語句超時時間為n秒。-1為永不超時

set name value

設(shè)置變量名為name,其值為value

set name [lindex $argv 0]

設(shè)置變量名為name,其值為 傳入 expect腳本的第一個 參數(shù) 。第一個參數(shù)的索引值為0,第二個為1,依次類推

spawn

啟動新的進程,執(zhí)行命令或者指定程序

expect

接收進程中返回的信息, 如果匹配成功(有大小寫區(qū)分), 就執(zhí)行expect后的動作

send

向進程發(fā)送字符串

send_user

用來打印信息,相當(dāng)于shell中的echo

exp_continue

執(zhí)行完expect后的動作后,使expect不退出,繼續(xù)往下匹配

expect eof

不允許用戶交互,直接退出(這個用的會比interact多)

interact

允許用戶交互

常見錯誤

spawn: command not found

執(zhí)行編寫好的expect腳本時,報以下錯誤信息,提示spawn: command not found,但通過rpm -qa | grep expect命令查看到expect軟件包的確安裝了,但是為什么仍然提示spawn命令找不到呢?

問題排查

重新排查了報錯的腳本,發(fā)現(xiàn)腳本的首行是#!/bin/sh ,把他改成#!/usr/bin/expect就可以了。

錯誤的腳本如下:

#!/bin/sh

# 設(shè)置超時時間(單位秒)
set timeout 10
# 設(shè)置你的密碼變量
set password "your_password_here"
# 執(zhí)行sudo命令,并監(jiān)視其輸出
spawn su root
# 當(dāng)提示符出現(xiàn)時,發(fā)送密碼
expect "*Password:"
send "$password\r"
# 交互模式,等待命令執(zhí)行完成
interact

問題分析

在編寫expect腳本時,在文件的首行需要以#!/usr/bin/expect作為shebang(即解釋器指示符),目的是告訴操作系統(tǒng)應(yīng)當(dāng)使用expect解釋器來執(zhí)行該腳本內(nèi)容。

然而,如果在執(zhí)行該腳本時,誤用了shell(如sh、bash等)命令進行解析和執(zhí)行,由于shell并不具備解析和執(zhí)行expect語句的能力,因此會導(dǎo)致腳本無法正確運行或出現(xiàn)錯誤。

所以,在排查expect腳本執(zhí)行問題時,若確認(rèn)腳本內(nèi)部邏輯無誤,但依然無法正常工作,應(yīng)關(guān)注腳本是如何被調(diào)用和執(zhí)行的。如果發(fā)現(xiàn)腳本是通過非預(yù)期的方式執(zhí)行,那么這就可能是問題的根源所在。

總結(jié)

到此這篇關(guān)于Linux自動化交互腳本expect從安裝到開發(fā)詳解的文章就介紹到這了,更多相關(guān)Linux自動化交互腳本expect內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 在Linux配置自啟動jar包方式

    在Linux配置自啟動jar包方式

    這篇文章主要介紹了在Linux配置自啟動jar包方式,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-01-01
  • ubuntu+php環(huán)境下的Memcached 安裝方法

    ubuntu+php環(huán)境下的Memcached 安裝方法

    Memcached是一套分散式的高速緩存系統(tǒng),當(dāng)初是Danga Interactive為了LiveJournal所發(fā)展
    2011-11-11
  • Linux命令中Ctrl+z、Ctrl+c和Ctrl+d的區(qū)別和使用詳解

    Linux命令中Ctrl+z、Ctrl+c和Ctrl+d的區(qū)別和使用詳解

    這篇文章主要介紹了Linux命令中Ctrl+z、Ctrl+c和Ctrl+d的區(qū)別和使用詳解,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-12-12
  • Linux外圍文件系統(tǒng)的定制方法

    Linux外圍文件系統(tǒng)的定制方法

    這篇文章主要給大家介紹了關(guān)于Linux外圍文件系統(tǒng)的定制方法,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-02-02
  • Linux內(nèi)核設(shè)備驅(qū)動之內(nèi)核中鏈表的使用筆記整理

    Linux內(nèi)核設(shè)備驅(qū)動之內(nèi)核中鏈表的使用筆記整理

    今天小編就為大家分享一篇關(guān)于Linux內(nèi)核設(shè)備驅(qū)動之內(nèi)核中鏈表的使用筆記整理,小編覺得內(nèi)容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧
    2018-12-12
  • 使用Putty遠程(SSH)管理Linux VPS的圖文教程

    使用Putty遠程(SSH)管理Linux VPS的圖文教程

    Putty是一個免費的、Windows 32平臺下的telnet、rlogin和ssh客戶端,但是功能絲毫不遜色于商業(yè)的telnet類工具。
    2010-12-12
  • 淺談linux線程切換問題

    淺談linux線程切換問題

    下面小編就為大家?guī)硪黄獪\談linux線程切換問題。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-01-01
  • Linux部署jar包過程

    Linux部署jar包過程

    文章介紹了在Linux系統(tǒng)上部署Java(jar)包時需要注意的幾個關(guān)鍵點,包括統(tǒng)一JDK版本、添加打包插件、修改數(shù)據(jù)庫密碼以及正確執(zhí)行jar包的方法
    2025-02-02
  • linux的硬鏈接和軟連接的區(qū)別及說明

    linux的硬鏈接和軟連接的區(qū)別及說明

    這篇文章主要介紹了linux的硬鏈接和軟連接的區(qū)別及說明,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-07-07
  • CentOS安裝jdk的幾種方法及配置環(huán)境變量方式

    CentOS安裝jdk的幾種方法及配置環(huán)境變量方式

    這篇文章主要介紹了CentOS安裝jdk的幾種方法及配置環(huán)境變量方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-12-12

最新評論