here document變數設定
here document格式控制
expect概述
expect語法
expect執行方式
使用i/o重定向的方式將命令列表提供給互動式程式
標準輸入的一種替代品
語法格式
命令<=>一般用eof
......
eof
1:標記可以使用任意合法字元
2:結尾的標記一定要頂格寫,前面不能有任何字元
3:結尾的標記後面也不能有任何字元(包括空格)
4:開頭標記前後的空格會被省略掉
[root@localhost ~]
# vim test.sh
#!/bin/bash
read i <<
eofhello
eofecho
$i[root@localhost ~]
# bash test.sh
hello
[root@localhost ~]
# vim test.sh
#!/bin/bash
useradd zhangsan
passwd zhangsan <<
eof123123 ===>passwd命令需要的密碼和確認密碼
123123
eof[root@localhost ~]
# bash test.sh
[root@localhost ~]
# vim test.sh
#!/bin/bash
doc_file=
"test.txt"
cat>
$doc_file
<<
eofthis is test
eof[root@localhost ~]
# bash test.sh
[root@localhost ~]
# cat test.sh
this is test
[root@localhost ~]
# vim test.sh
#!/bin/bash
doc_file=
"test.txt"
i="first"
cat>
$doc_file
<<
eofthis is $i test
eof[root@localhost ~]
# bash test.sh
[root@localhost ~]
# cat test.sh
this is first test
[root@localhost ~]
# vim test.sh
#!/bin/bash
doc_file=
"test.txt"
testfile=
$(
$doc_file
eof)
echo
$testfile
[root@localhost ~]
# bash test.sh
this is first test test.txt
[root@localhost ~]
# vim test.sh
#!/bin/bash
cat<<
'eof'===
>單引號關閉變數替換
this is test.
$text
eof[root@localhost ~]
# bash test.sh
this is test.
$text
[root@localhost ~]
# vim test.sh
#!/bin/bash
cat<<-'eof'===
>
'-'表示抑制行首的tab作用
this is test.
$text
eof[root@localhost ~]
# bash test.sh
this is test.
$text
here document多行注釋
[root@localhost ~]
# vim test.sh
#!/bin/bash
:<<
eofthis is test.
$text
eofecho
"hello"
[root@localhost ~]
# bash test.sh
hello
建立在tcl之上的乙個工具 ===>yum -y install expect
用於進行自動化控制和測試
解決shell指令碼中互動相關的問題
1.掛載光碟
2.製作本地yum源
3.執行安裝命令
方式一
[root@localhost ~]
# yum -y install expect
[root@localhost ~]
# rpm -qa|grep expect
方式二expect-5.45-14.el7_1.x86_64
[root@localhost ~]
# rpm -qa|grep tcl
tcl-8.5.13-8.el7.x86_64
spawn
啟動程序,並追蹤後續互動資訊
expect
send
向程序傳送字串,用於模擬使用者的輸入
該命令不能自動回車換行,一般要加\r(回車)
spawn [email protected] ===>追蹤指令—類似if條件
expect 「connecting (yes/no)?」 ===>捕捉會話—匹配字串
send yes\r ===>自動傳送指令—執行
結束符expect eof ===>執行自動話任務通常使用expect eof
等待執行結束
interact
執行完成後保持互動狀態,把控制權交給控制台
setset ===>日誌,資訊展示
設定超時事件,國企則繼續執行後續指令
單位是秒
timeout -1表示永不超時
預設情況下,timeout是10秒
exp_continue
exp_continue ===>不跳過繼續匹配
允許expect繼續向下執行指定
send_user
send_user
回顯命令,相當於echo
接收引數
expect指令碼可以接受從bash傳遞的引數
可以使用[lindex $ar** n]獲得
n從0開始,分別表示第乙個,第二個,第三個…引數
set 變數名(filename) [lindex $ar** 0]
單一分支語法
匹配的內容跟傳送的內容需要加上雙引號
expect 「password:」
多分支模式語法
語法一等價於語法二,與語法三略有區別
語法一expect 「aaa」
expect 「bbb」
expect 「ccc」 #send命令不具備回車換行功能,一般要加\r或\n
語法二expect
「bbb」
「ccc」 #只要匹配了aaa或bbb或ccc中的任意乙個,執行相應的send語句後退出該expecct語句
語法三expect
「bbb」
「ccc」 #exp_continue表示繼續後面的匹配,如果匹配了aaa,執行完send語句後還要繼續向下匹配bbb
}
[root@localhost ~]
# more test.sh
#!/usr/bin/expect ===>expect二進位制檔案的路徑
settimeout 60 ==
=>超時事件60秒
log file test.log ==
=>開啟日誌
log_user 1 ==
=>顯示資訊 0不顯示
sethostname
[lindex $ar** 0]===
>定義變數
set password [lindex $ar** 1]
spawn ssh root@$hostname===
>追蹤指令
expect
"*password"
}interact ==
=>轉交控制權
[root@localhost ~]
# chmod a+x test.sh
[root@localhost ~]
#./test.sh
#!/bin/bash
hostname=
$1password=
$2/usr/bin/expect<<-eof ==
=>expect開始標誌
spawn ssh root@$
expect
"*password:"
}expect
"*]#"
send "exit\r"
expect eof
eof ==
=>expect結束標誌,eof前後不能由空格
SHell程式設計之Expect免互動
1 expect是建立在tcl基礎上的乙個工具,expect是用來進行自動化控制和測試的工具。主要解決shell指令碼中不可互動的問題。對於大規模的linux運維很有幫助。2 在linux運維和開發中,我們經常需要遠端登入伺服器進行操作,登入的過程是乙個互動到的過程,可能會需要輸入yes no pa...
Shell 程式設計之Expect免互動
四 expect 執行方式 1 expect是建立在tcl基礎上的乙個工具,expect是用來進行自動化控制和測試的工具。主要解決shell指令碼中不可互動的問題。對於大規模的linux運維很有幫助。2 在linux運維和開發中,我們經常需要遠端登入伺服器進行操作,登入的過程是乙個互動到的過程,可能...
Shell 程式設計 免互動
here document使用i o重定向的方式將命令列表提供給互動式程式或命令,比如 ftp cat 或 read 命令。是標準輸入的一種替代品可以幫助指令碼開發人員不必使用臨時檔案來構建輸入資訊,而是直接就地生產出乙個 檔案 並用作 命令 的標準輸入。here document 也可以與非互動式...