linux中expect的介紹與使用示例
一、概述
我們通過(guò)Shell可以實(shí)現(xiàn)簡(jiǎn)單的控制流功能,如:循環(huán)、判斷等。但是對(duì)于需要交互的場(chǎng)合則必須通過(guò)人工來(lái)干預(yù),有時(shí)候我們可能會(huì)需要實(shí)現(xiàn)和交互程序如telnet服務(wù)器等進(jìn)行交互的功能。而Expect就使用來(lái)實(shí)現(xiàn)這種功能的工具。
Expect是一個(gè)免費(fèi)的編程工具語(yǔ)言,用來(lái)實(shí)現(xiàn)自動(dòng)和交互式任務(wù)進(jìn)行通信,而無(wú)需人的干預(yù)。Expect的作者Don Libes在1990年 開(kāi)始編寫(xiě)Expect時(shí)對(duì)Expect做有如下定義:Expect是一個(gè)用來(lái)實(shí)現(xiàn)自動(dòng)交互功能的軟件套件 (Expect [is a] software suite for automating interactive tools)。使用它系統(tǒng)管理員 的可以創(chuàng)建腳本用來(lái)實(shí)現(xiàn)對(duì)命令或程序提供輸入,而這些命令和程序是期望從終端(terminal)得到輸入,一般來(lái)說(shuō)這些輸入都需要手工輸入進(jìn)行的。 Expect則可以根據(jù)程序的提示模擬標(biāo)準(zhǔn)輸入提供給程序需要的輸入來(lái)實(shí)現(xiàn)交互程序執(zhí)行。甚至可以實(shí)現(xiàn)實(shí)現(xiàn)簡(jiǎn)單的BBS聊天機(jī)器人。 :)
Expect是不斷發(fā)展的,隨著時(shí)間的流逝,其功能越來(lái)越強(qiáng)大,已經(jīng)成為系統(tǒng)管理員的的一個(gè)強(qiáng)大助手。Expect需要Tcl編程語(yǔ)言的支持,要在系統(tǒng)上運(yùn)行Expect必須首先安裝Tcl。
二、Expect工作原理
從最簡(jiǎn)單的層次來(lái)說(shuō),Expect的工作方式象一個(gè)通用化的Chat腳本工具。Chat腳本最早用于UUCP網(wǎng)絡(luò)內(nèi),以用來(lái)實(shí)現(xiàn)計(jì)算機(jī)之間需要建立連接時(shí)進(jìn)行特定的登錄會(huì)話的自動(dòng)化。
Chat腳本由一系列expect-send對(duì)組成:expect等待輸出中輸出特定的字符,通常是一個(gè)提示符,然后發(fā)送特定的響應(yīng)。例如下面的 Chat腳本實(shí)現(xiàn)等待標(biāo)準(zhǔn)輸出出現(xiàn)Login:字符串,然后發(fā)送somebody作為用戶名;然后等待Password:提示符,并發(fā)出響應(yīng) sillyme。
引用:Login: somebody Password: sillyme
這個(gè)腳本用來(lái)實(shí)現(xiàn)一個(gè)登錄過(guò)程,并用特定的用戶名和密碼實(shí)現(xiàn)登錄。
Expect最簡(jiǎn)單的腳本操作模式本質(zhì)上和Chat腳本工作模式是一樣的。
三、一個(gè)例子:
#!/usr/bin/expect -f set ip [lindex $argv 0 ] //接收第一個(gè)參數(shù),并設(shè)置IP set password [lindex $argv 1 ] //接收第二個(gè)參數(shù),并設(shè)置密碼 set timeout 10 //設(shè)置超時(shí)時(shí)間 spawn ssh root@$ip //發(fā)送ssh請(qǐng)滶 expect { //返回信息匹配 "*yes/no" { send "yes\r"; exp_continue} //第一次ssh連接會(huì)提示yes/no,繼續(xù) "*password:" { send "$password\r" } //出現(xiàn)密碼提示,發(fā)送密碼 } interact //交互模式,用戶會(huì)停留在遠(yuǎn)程服務(wù)器上面.
運(yùn)行結(jié)果:
root@ubuntu:/home/zhangy# ./test.exp 192.168.1.130 admin spawn ssh root@192.168.1.130 Last login: Fri Sep 7 10:47:43 2012 from 192.168.1.142 [root@linux ~]#
總結(jié)
以上就是關(guān)于linux下使用expect示例的全部?jī)?nèi)容了,希望本文的內(nèi)容對(duì)大家的學(xué)習(xí)或者工作能帶來(lái)一定的幫助,如果有疑問(wèn)大家可以留言交流。
- linux自動(dòng)化交互腳本expect詳解
- Linux expect實(shí)現(xiàn)自動(dòng)登錄腳本實(shí)例代碼
- Linux下使用expect命令編寫(xiě)自動(dòng)化交互腳本
- expect實(shí)現(xiàn)批量修改linux密碼腳本分享
- Linux中使用expect腳本實(shí)現(xiàn)遠(yuǎn)程機(jī)器自動(dòng)登錄
- linux expect實(shí)現(xiàn)登陸遠(yuǎn)程主機(jī)并執(zhí)行命令示例代碼
- 詳解Linux使用shell+expect遠(yuǎn)程登錄主機(jī)
- Linux自動(dòng)化交互腳本expect從安裝到開(kāi)發(fā)詳解
相關(guān)文章
apache使用日志分割模塊rotatelogs分割日志詳解
本文介紹了apache使用自帶的日志分割模塊rotatelogs分割日志,rotatelogs 是 Apache 2.2 中自帶的管道日志程序,具體使用方法請(qǐng)參考下文2014-01-01ubuntu下的虛擬環(huán)境中安裝Django的操作方法
這篇文章主要介紹了ubuntu下的虛擬環(huán)境中安裝Django的操作方法,本文給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2019-09-09Linux?AMH?服務(wù)器管理面板遠(yuǎn)程訪問(wèn)的操作方法
AMH?是一款基于?Linux?系統(tǒng)的服務(wù)器管理面板,它提供了一系列的功能,包括網(wǎng)站管理、FTP?管理、數(shù)據(jù)庫(kù)管理、DNS?管理、SSL?證書(shū)管理等,本文介紹在Linux?中安裝AMH面板并結(jié)合Cpolar?內(nèi)網(wǎng)穿透工具實(shí)現(xiàn)遠(yuǎn)程訪問(wèn),感興趣的朋友一起看看吧2023-11-11linux 上在指定時(shí)間段內(nèi)每隔多少分鐘自動(dòng)執(zhí)行任務(wù)計(jì)劃crontab
這篇文章主要介紹了linux 上在指定時(shí)間段內(nèi)每隔多少分鐘自動(dòng)執(zhí)行任務(wù)計(jì)劃crontab,需要的朋友可以參考下2019-11-11linux寫(xiě)shell需要注意的問(wèn)題(必看)
下面小編就為大家?guī)?lái)一篇linux寫(xiě)shell需要注意的問(wèn)題(必看)。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2016-12-12Centos7學(xué)習(xí)之添加用戶和用戶組的方法
本篇文章主要介紹了Centos7學(xué)習(xí)之添加用戶和用戶組的方法,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2017-09-09Unix/Linux系統(tǒng)下的nobody用戶與nologin詳細(xì)介紹
linux系統(tǒng)下的nobody用戶是什么用戶,nologin又是什么?本文為大家詳細(xì)介紹了這兩個(gè)no字輩2018-10-10