[英]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.