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