方法一:
passwd=abcd
echo > /tmp/login_case.shcat > /tmp/login.sh << EOF
#!/usr/bin/expect
set host [lindex \$argv 0]
set passwd [lindex \$argv 1]
spawn -noecho ssh \$host -p9880
expect {
"(yes/no)?" {
send "yes\n"
expect "assword:"
send "\$passwd\n"
}
"assword:" {
send "\$passwd\n"
}
}
interact
exit
EOF
echo case '$1' in >> /tmp/login_case.sh
num=`sed '1,2d' /etc/hosts | wc -l`
for i in `seq 1 $num`
do
hang=`sed '1,2d' /etc/hosts |sed -n "$i p"`
host=`sed '1,2d' /etc/hosts |sed -n "$i p" | awk '{print $2}'`
echo '('$i')' $hang
cat >> /tmp/login_case.sh << EOF
$i) echo "login $host:"
expect /tmp/login.sh $host $passwd ;;
EOF
done
echo '*)'echo "You do not select a number between 1 to $num" >> /tmp/login_case.sh
echo esac >> /tmp/login_case.sh
echo -e "\n"
read -p "Choose you number: " input
bash /tmp/login_case.sh $input
方法二
num=`sed '1,2d' /etc/hosts | wc -l`
host=`sed '1,2d' /etc/hosts |sed -n "$input p" | awk '{print $2}'`
passwd=abcd
cat > /tmp/login.sh << EOF
#!/usr/bin/expect
set host [lindex \$argv 0]
set passwd [lindex \$argv 1]
spawn -noecho ssh \$host -p9880
expect {
"(yes/no)?" {
send "yes\n"
expect "assword:"
send "\$passwd\n"
}
"assword:" {
send "\$passwd\n"
}
}
interact
exit
EOF
#-----------列出host文件----------------------
for i in `seq 1 $num`
do
echo '('$i')'`sed '1,2d' /etc/hosts|sed -n "$i p"`
done
echo -e "\n"
#---------------读取选着文件------------------------
read -p "Choose you number: " input
host=`sed '1,2d' /etc/hosts |sed -n "$input p" | awk '{print $2}'`
cat > /tmp/login_case.sh << EOF
#!/bin/bash
case $input in
$input) echo "login $host:"
expect /tmp/login.sh $host $passwd ;;
*)echo "You do not select a number between 1 to $num"
esac
EOF
bash /tmp/login_case.sh