Shell程式設計 免交互操作

2021-10-25 22:24:33 字數 2201 閱讀 6675

二.here document免互動

三.變數設定

四.here document格式控制

五.多行注釋

六.expect工具

使用i/o重定向的方式將命令列表提供給互動式程式

標準輸入的一種替代品

命令 << 標記

互動所需輸入內容

標記例:read a < doc-file < aa.txt <<'eof'

456$a

eofcat aa.txt

456

在開頭標記前加-

此時開頭標記前不能有空格

例:cat <<-'eof'

123456

eof

##此時123456內容前的tab操作自動去除

: << do-nothing

注釋內容1

注釋內容2

注釋內容3

...do-nothing

## 這段內容不會被輸出

建立在tcl上的乙個工具

用於進行自動化控制和測試

解決shell指令碼互動相關的問題

可在yum本地源直接安裝

yum -y install expect

expect:判斷上次輸出結果中是否包含指定的字串,如果有則立即返回,否則就等待超時時間後返回,只能捕捉由spawn啟動的程序輸出,用於接收命令執行後的輸出,然後和期望的字串匹配

send:向程序傳送字串,用於模擬使用者輸入,該命令不能自動使用回車,可在字串後加\n或\r表示回車

spawn:啟動程序,並跟蹤後續互動資訊

expect eof:結束符,等待執行結束

interact:結束符,執行完成後保持互動狀態,把控制權交給控制台(如遠端登入操作使用)

set:設定超時時間,過期則繼續執行後續指令,單位為秒,引數timeout -1為永不超時,預設為10秒

exp_continue:允許expect繼續向下執行命令,使前後命令為整體

send_user:回顯命令,相當於echo

log_user 1:記錄日誌

log_file:指定記錄日誌檔案

expect指令碼可以接收從bash傳遞的引數

使用[lindex $ar** n]獲得(n表示位置變數,從0開始,0為第乙個)

expect "passwd:"
語法一:

expect "aaa"

expect "bbb"

expect "ccc"

語法二:

expect

"bbb"

"ccc"

語法三:

expect

"bbb"

"ccc"

}##執行a、b無論是否有問題,不會退出,會繼續向下執行

#!/usr/bin/expect	    	##使用expect命令寫文字

set timeout 30 ##超時時間30秒

log_file test.log ##日誌檔案路徑

log_user 1 ##記錄日誌

set hostname [lindex $ar** 0] ##定義變數為執行指令碼位置變數的$1

set password [lindex $ar** 1]

spawn ssh root@$hostname ##啟動程序

expect

"password:" }

interact ##保持互動狀態結束符

#!/bin/bash

hostname=$1

password=$2

/usr/bin/expect<<-eof ##expect命令內容開始標誌

spawn ssh root@$hostname

expect

"*password:"

}expect "*]#"

send "exit\r"

expect eof

eof ===>expect命令內容結束標誌

Shell 程式設計 免互動

here document使用i o重定向的方式將命令列表提供給互動式程式或命令,比如 ftp cat 或 read 命令。是標準輸入的一種替代品可以幫助指令碼開發人員不必使用臨時檔案來構建輸入資訊,而是直接就地生產出乙個 檔案 並用作 命令 的標準輸入。here document 也可以與非互動式...

Shell程式設計之免互動

here document變數設定 here document格式控制 expect概述 expect語法 expect執行方式 使用i o重定向的方式將命令列表提供給互動式程式 標準輸入的一種替代品 語法格式 命令 一般用eof eof1 標記可以使用任意合法字元 2 結尾的標記一定要頂格寫,前面...

SHell程式設計之Expect免互動

1 expect是建立在tcl基礎上的乙個工具,expect是用來進行自動化控制和測試的工具。主要解決shell指令碼中不可互動的問題。對於大規模的linux運維很有幫助。2 在linux運維和開發中,我們經常需要遠端登入伺服器進行操作,登入的過程是乙個互動到的過程,可能會需要輸入yes no pa...