2017-07-12 7 views
0

私はexpectスクリプトをforループのbashスクリプトの中に書いています。 expectスクリプト中に条件が満たされると、スクリプトは 'exit'コマンドで終了します。しかし、それはbashスクリプトに来て、次の繰り返しのために再び行きます。 bashスクリプトでbreak文を指定すると、すべての条件に影響します。私はこれをどのように実装できるのかをお勧めします。expectとbashスクリプトを終了するには

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 [email protected]$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スクリプトを終了する必要があります。

答えて

1

expectスクリプトにエラーがある場合は、ゼロ以外の値を返します(例:exit 23)。

次に、bashコードで、結果を確認してください。ゼロでない場合は、ループのうちbreak

ret_val=$?` 
if [ $ret_val -ne 0 ]; then 
    break 
fi 
関連する問題