簡體   English   中英

如何退出expect和bash腳本

[英]How to exit from expect and bash script

我在for循環bash腳本中編寫了一個expect腳本。 在期望腳本期間滿足條件時,腳本將使用'exit'命令退出。 但是它會出現在bash腳本中並再次進行下一次迭代。 如果我在bash腳本中提供break語句,它將影響所有條件。 請建議我如何實現這一點。

for i in `cat /tmp/downtimehosts.txt`
do
{
y=$( expr $y + 1 )
j=$(echo $i | awk -F. '{print $1}')
host=$(cat /tmp/ipmon_host_db.txt | grep $j | awk '{print $4}')
ipmon=$(cat /tmp/ipmon_host_db.txt | grep $j | awk '{print $2}')

if [ $? -eq 0 ]
then
{
/usr/bin/expect -c "
spawn ssh $username@$ipmon
expect {
-re ".*Are.*.*yes.*no.*" {
send \"yes\r\"
exp_continue
}
"*?ssword:*" {
send \"$password\r\"
expect "password" {
send "quit\r"
exit
}
}}
expect "denied" {
send "quit\r"
exit
}
expect "~]$"
send \"sudo su -\r\"
expect "password"
send \"$password\r\"
expect "~]"
send \"/apps/bin/schedule-downtime.pl -v -h "$host" -d 
"$his"\r\"
expect "~]"
send \"logout\r\"
expect "~]"
send \"logout\r\"
expect eof"
}
else
:
fi
}
done

在上面,如果密碼錯誤,它必須退出expect腳本以及bash腳本。

如果您的expect腳本中存在錯誤,則返回非零值,例如, exit 23

然后在你的bash代碼中,用$?檢查結果$? 如果它不為零,則break循環:

ret_val=$?
if [ $ret_val -ne 0 ]; then
   break
fi

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM