系統(tǒng)之家 - 系統(tǒng)光盤下載網(wǎng)站!

當(dāng)前位置:系統(tǒng)之家 > 系統(tǒng)教程 > Linux系統(tǒng)expect命令操作實(shí)例

Linux系統(tǒng)expect命令操作實(shí)例

時(shí)間:2015-04-10 16:31:40 作者:qipeng 來源:系統(tǒng)之家 1. 掃描二維碼隨時(shí)看資訊 2. 請(qǐng)使用手機(jī)瀏覽器訪問: https://m.xitongzhijia.net/xtjc/20150410/44867.html 手機(jī)查看 評(píng)論

  Linux眾多命令中,expect命令比較不常見,我們可以使用expect命令來實(shí)現(xiàn)腳本的自動(dòng)登錄、等待進(jìn)程的反饋等。那么expect命令還有哪些用途呢?隨小編一起來瞧瞧吧。

 Linux系統(tǒng)expect命令操作實(shí)例

  先來看一段代碼:

  #!/usr/bin/expect

  set timeout 30

  spawn ssh -l root 192.168.1.188

  expect “password:”

  send “abc123456\r”

  interact

  對(duì)這6行進(jìn)行下解釋:

  第1行[#!/usr/bin/expect]

  這一行告訴操作系統(tǒng)腳本里的代碼使用那一個(gè)shell來執(zhí)行。這里的expect其實(shí)和linux下的bash、windows下的cmd是一類東西。 這一行需要在腳本的第一行。

  第2行[set timeout 30]

  基本上認(rèn)識(shí)英文的都知道這是設(shè)置超時(shí)時(shí)間的,現(xiàn)在你只要記住他的計(jì)時(shí)單位是:秒

  第3行 [spawn ssh -l username 192.168.1.188]

  spawn是進(jìn)入expect環(huán)境后才可以執(zhí)行的expect內(nèi)部命令,如果沒有裝expect或者直接在默認(rèn)的SHELL下執(zhí)行是找不到spawn命 令的。所以不要用 “which spawn“之類的命令去找spawn命令。好比windows里的dir就是一個(gè)內(nèi)部命令,這個(gè)命令由shell自帶,你無法找到一個(gè)dir.com 或 dir.exe 的可執(zhí)行文件。 它主要的功能是給ssh運(yùn)行進(jìn)程加個(gè)殼,用來傳遞交互指令。

  第4行[expect “password:”]

  這里的expect也是expect的一個(gè)內(nèi)部命令,有點(diǎn)暈吧,expect的shell命令和內(nèi)部命令是一樣的,但不是一個(gè)功能,習(xí)慣就好了。這個(gè)命 令的意思是判斷上次輸出結(jié)果里是否包含“password:”的字符串,如果有則立即返回,否則就等待一段時(shí)間后返回,這里等待時(shí)長(zhǎng)就是前面設(shè)置的30 秒

  第5行[send “abc123456\r”]

  這里就是執(zhí)行交互動(dòng)作,與手工輸入密碼的動(dòng)作等效。

  溫馨提示: 命令字符串結(jié)尾別忘記加上“\r”,如果出現(xiàn)異常等待的狀態(tài)可以核查一下。

  第6行[interact]

  執(zhí)行完成后保持交互狀態(tài),把控制權(quán)交給控制臺(tái),這個(gè)時(shí)候就可以手工操作了。如果沒有這一句登錄完成后會(huì)退出,而不是留在遠(yuǎn)程終端上。

  在Linux下,執(zhí)行ssh登陸或者是scp復(fù)制文件的時(shí)候可以使用到該命令,實(shí)現(xiàn)自動(dòng)輸入密碼。

  案例1:遠(yuǎn)程執(zhí)行命令

  #!/usr/bin/expect -f

  set timeout 30

  spawn ssh -l root 192.168.1.188

  expect {

  “yes/no” { send “yes\r”;exp_continue }

  “password:” { send “abc123456\r” }

  }

  expect -re “\](\$|#) ”

  send “bash /root/test.sh \r”

  expect -re “\](\$|#) ”

  send “exit\r”

  該代碼的功能是執(zhí)行遠(yuǎn)程服務(wù)器上的/root/test.sh腳本,參數(shù)“-re”是匹配正則表達(dá)式?梢詫懚嘈衧end,執(zhí)行多個(gè)命令。該腳本的另一種寫法

  #!/bin/bash

  expect -c “

  spawn ssh root@192.168.1.188 \”ifconfig;whoami;pwd;echo hello;\“

  expect {

  \”*assword\“ {set timeout 30; send \”abc123456\r\“;}

  \”yes/no\“ {send \”yes\r\“; exp_continue;}

  }

  expect eof

  ”

  參數(shù)“-c”是指在命令行執(zhí)行expect。把要執(zhí)行的命令用分號(hào)隔開了。并且執(zhí)行過程中沒有shell提示符的,有興趣的你可以測(cè)試下。

標(biāo)簽 命令

發(fā)表評(píng)論

0

沒有更多評(píng)論了

評(píng)論就這些咯,讓大家也知道你的獨(dú)特見解

立即評(píng)論

以上留言僅代表用戶個(gè)人觀點(diǎn),不代表系統(tǒng)之家立場(chǎng)

其他版本軟件

熱門教程

人氣教程排行

Linux系統(tǒng)推薦

官方交流群 軟件收錄