Expect腳本詳解

一、expect腳本運行順序

expect腳本是一個腳本語言,它可以讓你自動化執行交互式任務,比如執行ssh登錄、ftp上傳下載等。expect腳本的運行順序如下:

#!/bin/bash
/usr/bin/expect <<EOF
spawn ssh user@host
expect "password:"
send "password\r"
expect "]#"
send "command\r"
expect "]#"
send "exit\r"
expect eof
EOF

我們可以把expect語句看成是在模擬人類在命令行上的操作,比如輸入用戶名,密碼,然後執行命令,最後退出。expect腳本中最核心的命令是spawn和expect,前者是運行一個新的shell進程,並啟動一個交互會話;後者用來捕獲shell的輸出,判斷命令執行的狀態。

二、expect結束腳本

在很多情況下,我們需要判斷expect腳本是否執行成功。一種方法是通過expect eof判斷交互過程是否結束,如果結束那麼expect命令會返回0,否則會返回一個非零值。我們可以根據這個返回值來判斷是否執行成功。

#!/bin/bash
/usr/bin/expect <<EOF
spawn ssh user@host
expect "password:"
send "password\r"
expect "]#"
send "command\r"
expect "]#" {
send "exit\r"
expect eof
exit 0
} "Permission denied" {
exit 1
}
EOF

上面的例子中如果登錄成功,那麼expect會返回0,腳本退出;否則如果出現”Permission denied”,則expect會返回非零值,腳本也會退出。

三、shell腳本expect安裝

在很多Linux發行版中,expect命令並不會默認安裝。我們需要手動安裝才能使用。安裝方法如下:

sudo apt-get install expect

如果你的系統中沒有apt-get命令,那麼可以嘗試其他發行版的包管理器,比如yum,dnf,或者直接從源代碼編譯安裝。但這裡不再深入討論,可以參考expect官方文檔進行操作。

四、expect的用法

expect命令的基本用法如下:

expect "string"
expect -exact "string"
expect -glob "pattern"
expect -re "regexp"
expect { }

其中,-exact選項表示精確匹配,-glob選項表示通配符匹配,-re選項表示正則表達式匹配,而{}用來包含多個expect命令。在使用的時候,我們可以根據需要選擇不同的匹配方式,來準確匹配shell的輸出。

五、linux中expect

Linux系統中expect命令的使用非常廣泛,尤其是在自動化管理中。可以自動化執行ssh登錄、ftp上傳下載、telnet等各種任務。舉一個簡單的ssh登錄的例子:

#!/usr/bin/expect -f
set timeout 20
set user [lindex $argv 0]
set passwd [lindex $argv 1]
set host [lindex $argv 2]
set cmd [lindex $argv 3]

spawn ssh $user@$host
expect {
    "(yes/no)*" {
        send "yes\r"
        expect "*password:*"
        send "$passwd\r"
    }
    "*assword:*" {
        send "$passwd\r"
    }
}
expect "$*"
send "$cmd\r"
expect "$*"
send "exit\r"
expect eof

上面的expect腳本使用了spawn命令啟動一個新的ssh會話,並通過expect命令匹配輸出字符串,來輸入用戶名和密碼。其它的命令依然是通過send和expect命令來執行和捕獲。

六、expect命令如何使用

在實際使用中,expect命令有一下幾個基本步驟:

1、使用spawn命令啟動一個新的交互式會話。

2、使用expect命令匹配輸出字符串,並根據輸出字符串來輸入命令或者密碼。

3、使用send命令發送要執行的命令或者字符串。

4、使用expect命令匹配上一條命令的輸出,並進行相應的處理,比如判斷命令執行是否成功。

5、使用exit命令退出交互式會話,或者通過expect eof命令判斷會話是否結束。

七、linux expect用法

在Linux系統中,expect命令的應用非常廣泛,特別是在自動化管理中。我們可以使用expect腳本自動執行一些需要交互操作的命令,免去手動操作的繁瑣。比如,我們可以用expect來自動安裝一些軟件包:

#!/bin/bash
#/media/site/update/expect/auto_sudo_gcc5.sh
#use expect to automate entering password
echo $0
function auto_sudo()
{
   expect << EOF
   spawn sudo su -
   expect {
      "*password*" {
         send "$1\r"
      }
   }
   expect "*#"
   send "cd /media/site/program/gcc5\r"
   send "ls -lh\r"
   send "pwd\r"
   send "./install.sh\r"
   send "exit\r"
   expect eof
EOF
}
auto_sudo "password"

上面的expect腳本可以自動安裝gcc5,並且自動輸入sudo密碼,免去了手動輸入密碼的繁瑣。

八、expect的用法shell

expect命令的用法非常靈活,我們可以根據不同的需求來選用不同的匹配方法。在實際使用中,我們也需要結合shell的一些特性來編寫expect腳本。比如,我們可以給expect命令設置超時時間,來避免卡頓問題:

#!/usr/bin/expect -f
set timeout 20
spawn ssh user@host
expect "Password:"
send "password\r"
expect {
    ")>" {
        send "command1\r"
        expect ")>"
        send "command2\r"
        expect ")>"
        send "exit\r"
    }
    timeout {
        puts "timeout"
        exit 1
    }
}
expect eof

上面的expect腳本中我們使用了timeout命令來設定expect命令的超時時間。如果超時了,那麼會執行timeout後的腳本。

原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-hant/n/183443.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
小藍的頭像小藍
上一篇 2024-11-24 16:28
下一篇 2024-11-24 16:28

相關推薦

  • Python腳本控制其他軟件

    Python作為一種簡單易學、功能強大的腳本語言,具有廣泛的應用領域,在自動化測試、Web開發、數據挖掘等領域都得到了廣泛的應用。其中,Python腳本控制其他軟件也是Python…

    編程 2025-04-29
  • Shell腳本與Python腳本的區別

    本文將從多個方面對Shell腳本與Python腳本的區別做詳細的闡述。 一、語法差異 Shell腳本和Python腳本的語法存在明顯差異。 Shell腳本是一種基於字符命令行的語言…

    編程 2025-04-29
  • Python自動化運維腳本

    Python自動化運維腳本是使用Python編寫的代碼,可以幫助管理員自動化執行繁瑣、重複的操作任務。通過Python自動化運維腳本,管理員可以在更短的時間內完成工作,提高工作效率…

    編程 2025-04-28
  • 使用Python圖書館搶座腳本的完整步驟

    本文將從多個方面詳細介紹如何使用Python編寫圖書館的座位搶佔腳本,並幫助您快速了解如何自動搶佔圖書館的座位,並實現您的學習計劃。 一、開發環境搭建 首先,我們需要安裝Pytho…

    編程 2025-04-28
  • ArcGIS的Python腳本需要主函數嗎?

    是的,ArcGIS的Python腳本需要主函數,主函數是Python腳本的入口和起點,沒有主函數腳本無法運行。 一、主函數的作用 在Python腳本中,主函數是代碼的入口,所有的代…

    編程 2025-04-28
  • Python監控腳本開發指南

    本文將為大家介紹Python編寫監控腳本的方法和技巧,幫助大家更好地了解監控腳本在項目中的應用。 一、監控腳本概述 監控腳本可以作為一個重要的工具來監控服務器狀態,包括CPU、內存…

    編程 2025-04-27
  • 如何使用JS調用Python腳本

    本文將詳細介紹通過JS調用Python腳本的方法,包括使用Node.js、Python shell、child_process等三種方法,以及在Web應用中的應用。 一、使用Nod…

    編程 2025-04-27
  • Django項目中執行Python腳本

    本文將闡述在Django項目中如何執行Python腳本以及執行腳本的幾種方式。 一、subprocess模塊執行Python腳本 subprocess模塊提供了一個簡單的接口用於創…

    編程 2025-04-27
  • Linux sync詳解

    一、sync概述 sync是Linux中一個非常重要的命令,它可以將文件系統緩存中的內容,強制寫入磁盤中。在執行sync之前,所有的文件系統更新將不會立即寫入磁盤,而是先緩存在內存…

    編程 2025-04-25
  • 神經網絡代碼詳解

    神經網絡作為一種人工智能技術,被廣泛應用於語音識別、圖像識別、自然語言處理等領域。而神經網絡的模型編寫,離不開代碼。本文將從多個方面詳細闡述神經網絡模型編寫的代碼技術。 一、神經網…

    編程 2025-04-25

發表回復

登錄後才能評論