Shell中使用Expect Here Document
在使用Shell写程序时,有时不得不面对交互的问题——可惜shell往往无法自动完成交互。如果交互的内容很多,自然是直接应用Expect脚本比较方便;如果交互的内容很少,而且考虑到Shell的易用性,在Shell脚本中创建一个Expect 的Here Document更加方便灵活。
如下例所示,Expect Here Document可以直接运行并将运行结果赋给KSH变量rcs_stat。
- #!/bin/ksh
- autoload formatAPnum
- # Set the lab name, COOLLAB
- . $COOLXDIR/.netlabs
- # Get the RCS cell list
- set -A RCSs
- typeset -i nx=0
- cat $COOLXDIR/.coolcell2dcs | while read cell
- do
- if [[ "$cell" = c* ]]
- then
- rcs=${cell%%$COOLLAB*}
- RCSs[$nx]=${rcs#c}
- nx=$nx+1
- fi
- done
- # Check RCS status
- typeset -i loopCount=0
- rcs_cnt=${#RCSs[*]}
- B_server=$(formatAPnum $BserverAP)
- while [ "${#RCSs[*]}" != 0 -a $loopCount -lt 720 ] # wait at most 2 hours
- do
- loopCount=${loopCount}+1
- nx=0
- while [ $nx -lt $rcs_cnt ]
- do
- rcs_stat="OOS"
- rcs_stat=$(
- expect - <<!
- log_user 0
- set timeout 20
- spawn $COOL_RSH ap$B_server TICLI
- send "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" ]
- then
- coolprint - "RCS cell ${RCSs[$nx]} is up."
- unset RCSs[$nx]
- fi
- nx=${nx}+1
- done
- [ -n "${RCSs[*]}" ] && sleep 10
- done
- coolprint - "All RCSs are up."
- exit 0
相关推荐
IT之家 2020-03-11
graseed 2020-10-28
zbkyumlei 2020-10-12
SXIAOYI 2020-09-16
jinhao 2020-09-07
impress 2020-08-26
liuqipao 2020-07-07
淡风wisdon大大 2020-06-06
yoohsummer 2020-06-01
chenjia00 2020-05-29
baike 2020-05-19
扭来不叫牛奶 2020-05-08
hxmilyy 2020-05-11
黎豆子 2020-05-07
xiongweiwei00 2020-04-29
Cypress 2020-04-25
冰蝶 2020-04-20