Shell中使用Expect Here Document

來源:互聯網
上載者:User

在使用Shell寫程式時,有時不得不面對互動的問題——可惜shell往往無法自動完成互動。如果互動的內容很多,自然是直接應用Expect指令碼比較方便;如果互動的內容很少,而且考慮到Shell的易用性,在Shell指令碼中建立一個Expect 的Here Document更加方便靈活。

如下例所示,Expect Here Document可以直接運行並將運行結果賦給KSH變數rcs_stat。

#!/bin/kshautoload formatAPnum# Set the lab name, COOLLAB. $COOLXDIR/.netlabs# Get the RCS cell listset -A RCSstypeset -i nx=0cat $COOLXDIR/.coolcell2dcs | while read celldoif [[ "$cell" = c* ]]thenrcs=${cell%%$COOLLAB*}RCSs[$nx]=${rcs#c}nx=$nx+1fidone# Check RCS statustypeset -i loopCount=0rcs_cnt=${#RCSs[*]}B_server=$(formatAPnum $BserverAP)while [ "${#RCSs[*]}" != 0 -a $loopCount -lt 720 ]  # wait at most 2 hoursdoloopCount=${loopCount}+1nx=0while [ $nx -lt $rcs_cnt ]dorcs_stat="OOS"rcs_stat=$(expect - <<!log_user 0set timeout 20spawn $COOL_RSH ap$B_server TICLIsend "op:cell ${RCSs[$nx]}\r"expect {timeout {puts "OOS\n"}"*DL(S) DOWN" {puts "OOS\n"}"*DL(S) UP" {puts "UP\n"}}!)if [ "$rcs_stat" = "UP" ]thencoolprint - "RCS cell ${RCSs[$nx]} is up."unset RCSs[$nx]finx=${nx}+1done[ -n "${RCSs[*]}" ] && sleep 10 donecoolprint - "All RCSs are up."exit 0




相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.