shell脚本详解(十二)——Here Document免交互及Expect自动化交互
生活随笔
收集整理的這篇文章主要介紹了
shell脚本详解(十二)——Here Document免交互及Expect自动化交互
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
shell腳本詳解(十二)——Here Document免交互及Expect自動化交互
- 一、Here Document 免交互
- 1、格式
- 2、注意事項
- 3、免交互方式實現對行數的統計,將要統計的內容置于標記“EOF”之間,直接將內容傳給wc -l 來統計
- 4、通過read 命令接收輸入并打印,輸入值是兩個EOF標記之間的部分,作為變量 i 的值
- 5、通過passwd給用戶設置密碼
- 6、支持變量替換:在寫入文件時會先將變量替換成實際值,再結合cat 命令完成寫入
- 7、整體賦值給變量,然后通過echo命令將變量值打印出來
- 8、關閉變量替換的功能,按照字符原本的樣子輸出,不做任何修改或替換
- 9、去掉每行之前的TAB字符
- 10、多行注釋
- 二、Expect 自動化交互
- 1、基本命令
- 2、直接執行
- 3、嵌入執行模式
- 4、例題1:實現SSH免交互自動登錄
- 嵌入式
- 直接連接
- 5、例題2:免交互放肆實現創建磁盤分區
一、Here Document 免交互
- 使用I/O重定向的方式將命令列表提供給交互式程序或命令,比如ftp、cat或read命令。
- 是標準輸入的一種替代品可以幫助腳本開發人員不必使用臨時文件來構建輸入信息,而是直接就地生成出一個“文件”并用作“命令”的標準輸入。Here Document 也可以與非交互式程序和命令一起使用。
1、格式
2、注意事項
- 標記可以使用任意合法字符 (通常使用EOF)
- 結尾的標記一定要頂格寫,前面不能有任何字符
- 結尾的標記后面也不能有任何字符(包括空格)
- 開頭標記前后的空格會被省略掉
3、免交互方式實現對行數的統計,將要統計的內容置于標記“EOF”之間,直接將內容傳給wc -l 來統計
4、通過read 命令接收輸入并打印,輸入值是兩個EOF標記之間的部分,作為變量 i 的值
5、通過passwd給用戶設置密碼
6、支持變量替換:在寫入文件時會先將變量替換成實際值,再結合cat 命令完成寫入
7、整體賦值給變量,然后通過echo命令將變量值打印出來
8、關閉變量替換的功能,按照字符原本的樣子輸出,不做任何修改或替換
9、去掉每行之前的TAB字符
10、多行注釋
- Bash 的默認注釋是“#”,該注釋方法只支持單行注釋:Here Document 的引入解決了多行注釋的問題。
- ":"代表什么都不做的空命令。中間標記區域的內容不會被執行,會被bash忽略掉,因此可達到批量注釋的效果。
二、Expect 自動化交互
- 建立在tcl語言基礎上的一個工具,常被用于進行自動化控制和測試,解決shell腳本中交互相關的問題。
1、基本命令
-
腳本解釋器
- expect 腳本中首先引入文件,表明使用的是哪一個 shell。
-
spawn
- spawn 后面通常跟一個Linux執行命令,表示開啟一個會話、啟動進程,并跟蹤后續交互信息。
-
expect
- 判斷上次輸出結果中是否包含指定的字符串,如果有則立即返回,否則就等待超時時間后返回;
- 只能捕捉由spawn啟動的進程的輸出;
- 用于接收命令執行后的輸出,然后和期望的字符串匹配。
-
send
- 向進程發送字符串,用于模擬用戶的輸入;該命令不能自動回車換行,一般要加 \r(回車)或者 \n。
- 結束符:
- expect eof
- interact
-
set
- expect 默認的超時時間是 10 秒,通過 set 命令可以設置會話超時時間, 若不限制超時時間則應設置為-1。
-
exp_continue
- exp_continue 附加于某個 expect 判斷項之后,可以使該項被匹配后,還能繼續匹配該 expect 判斷語句內的其他項。exp_continue 類似于控制語句中的 continue 語句。表示允許 expect 繼續向下執行指令。
-
send_user
- send_user 表示回顯命令,相當于 echo 。
-
接收參數
- expect 腳本可以接受從bash命令行傳遞的參數,使用[lindex $argv n]獲得。其中n從0開始,分別表示第一個,第二個,第三個…參數。
2、直接執行
expect 直接執行,需要使用 expect 命令去執行腳本 #!/usr/bin/expect #設置超時時間 set timeout 5 #參數傳入 set username [lindex $argv 0] set password [lindex $argv 1] #開始追蹤命令 spawn su $username #免交互執行,捕捉信息并匹配 expect "密碼" send "$password\r" expect "*]#" send user "ok" #把控制權交給控制臺 interact3、嵌入執行模式
#! /bin/bash user=$1 password=$2 #非交互命令放在expect外面 useradd $user #開始免交換執行 /usr/bin/expect <<EOF #expect開始標志 spawn passwd $user #開啟一個進程跟蹤passwd命令,expect只能捕捉該進程信息 expect "新的*" send "${password}\r" expect "重新*" send "${password}\r" expect eof EOF
4、例題1:實現SSH免交互自動登錄
嵌入式
直接連接
5、例題2:免交互放肆實現創建磁盤分區
總結
以上是生活随笔為你收集整理的shell脚本详解(十二)——Here Document免交互及Expect自动化交互的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 主机内存:大小合适才能事半功倍
- 下一篇: 防火墙简介(一)——iptables防火