亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

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

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

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

expect使用場(chǎng)景

文件傳輸

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

SSH登錄自動(dòng)化

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

sudo權(quán)限提升

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

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

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

自動(dòng)安裝程序

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

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

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

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

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

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

安裝expect

查看是否安裝了expect

whereis expect

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

expect:[root@test ~]#

安裝expect

yum install -y expect

安裝成功提示

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

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

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

以下是一個(gè)基本的expect腳本示例,它會(huì)自動(dòng)為sudo命令提供密碼。

腳本內(nèi)容

#!/usr/bin/expect

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

腳本解釋

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

常用命令說(shuō)明

命令

說(shuō)明

set timeout n

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

set name value

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

set name [lindex $argv 0]

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

spawn

啟動(dòng)新的進(jìn)程,執(zhí)行命令或者指定程序

expect

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

send

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

send_user

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

exp_continue

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

expect eof

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

interact

允許用戶交互

常見(jiàn)錯(cuò)誤

spawn: command not found

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

問(wèn)題排查

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

錯(cuò)誤的腳本如下:

#!/bin/sh

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

問(wèn)題分析

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

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

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

總結(jié)

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

相關(guān)文章

  • 在Linux配置自啟動(dòng)jar包方式

    在Linux配置自啟動(dòng)jar包方式

    這篇文章主要介紹了在Linux配置自啟動(dòng)jar包方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    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ū)別和使用詳解,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-12-12
  • Linux外圍文件系統(tǒng)的定制方法

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

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

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

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

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

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

    淺談linux線程切換問(wèn)題

    下面小編就為大家?guī)?lái)一篇淺談linux線程切換問(wèn)題。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2017-01-01
  • Linux部署jar包過(guò)程

    Linux部署jar包過(guò)程

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

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

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

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

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

最新評(píng)論