shell程式設計之免互動

weixin_42602392發表於2020-11-01

一.免互動
1.原理:使用I/O重定向的方式將命令列表提供給互動式程式,標準輸入的一種替代品
2.語法格式
命令


標記
3.注意事項
·標記可以使用任意合法字元
·結尾的標記一定要頂格寫,前面不能有任何字元
·結尾的標記後面也不能有任何字元
·開頭標記前後的空格會被聖羅

3.免互動方式實現對行數的統計,將要統計的內容置於標記“EOF”之間,直接將內容傳給wc -l來統計
wc -l <<EOF

Line1
Line2
EOF

4.通過read命令接收輸入並列印,輸入值是兩個EOF標記之間的部分,作為變數i的值
read i<<EOF

Hi
EOF
echo $i

二.Expect
1.原理:建立在tcl語言基礎上的一個工具,常被用於進行自動化控制和測試,解決shell指令碼中互動相關的問題
rpm -q expect
rpm -q tcl
yum -y install expect
2.基本命令
①.指令碼直譯器:expect指令碼中首先引入檔案,表明使用的是哪一個shell
②.spawn:spawn後面通常跟一個命令,表示開啟一個會,啟動程式,並跟蹤後續互動資訊
③.expect:判斷上次輸出結果中是否包含指定的字串,如果有則立即返回,否則就等待超時時間後返回,只能捕捉由spawn啟動的程式的輸出;用於接收命令執行後的輸出,然後和期望的字串匹配
④.send:向程式傳送字串,用於模擬使用者的輸入;該命令不能自動回車換行,一般要加\r
⑤.結束符:expect eof等待執行結束,退回到原使用者,與spawn對應
⑥set:expect預設的超時時間是10秒,通過set命令可以設定會話超時時間,若不限制超時時間則應設定為-1
⑦.exp_continue:表示允許expect繼續向下執行指令
⑧.send_user:表示回顯命令,相當於echo
⑨.接收引數:expect指令碼可以接收從bash命令列傳遞的引數,使用[lindex $argv n]獲得,其中n從0開始,分別表示第一個,第二個…引數

相關文章