【shell】expect的使用案例

【shell】expect的使用案例

时间:2013-09-11 11:09:42      作者:beebol      标签: bash_profile expect      分类: Linux基础 Shell

今天vaster问我,如何检测linux的信任做好了没?我就说直接ssh,设置超时时间,或者用expect。后来她说用不好expect,所以我在终端直接给他写了个急用。因为下班了,要回家,也没有做太多解释,写出来了,理解肯定没有什么问题。也不是她不会,主要是写得太少了。expect使用方法就不说了,网上多得很。我就直接写几个例子吧。

(一)并发检查服务器与DB的连通性:

#!/bin/bash

IPLIST="/home/oper/admin/webtool/iplist.txt"

THREAD=10     #设置并发数量
TMPFIFO=/tmp/$$.fifo
mkfifo $TMPFIFO
exec 3<>${TMPFIFO}
rm -rf ${TMPFIFO}

for((i=1;i<=$THREAD;i++))
do
echo ;done >&3
done >&3

循环检查需要检测db连通性的服务器

for i in $(cat ${IPLIST} | grep -v "^#" |awk '{print $1}')
do
read -u3
{

#登录到服务器,记住一定要设置超时时间,防止连接不上服务器,浪费时间。

#ConnectTimeout连接超时时间,ConnectionAttempts超时次数
ssh -oConnectTimeout=30 -oConnectionAttempts=3 $i "
for j in \$(cat /etc/odbc.ini |grep SERVER | awk '{print \$3}')    #这里获得服务器需要连接的DB服务器
do
num=\$(expect -c \"
set timeout 2;    #设置telnet超时时间
spawn telnet \$j 3306;    #这里用mysql举例
expect EOF
\" |grep Connected |wc -l)

#判断是否有Connected出现,有就表示连通性是正常的。
if [ \$num -eq 1 ];then
echo -e \"\e[1;32m$i to \${j} is OK\e[0m\"
else
echo -e \"\e[1;31m$i to \${j} is error\e[0m\"
fi
done
"
echo "" >&3
} &
done

exec 3>&-
waitexit 0
exit 0

(三)下面这个例子是用自己的用户登录服务器后,所有的操作需要切换到oper用户下,每次切换太麻烦了,所以用expect写了几句脚本,然后放到~/.bash_profile,每次登录自己的用户自动切换到操作用户下。方便了许多。

$cat .bash_profile
cd ~/ && ./autosu.exp

#################################

$cat autosu.exp
#!/usr/bin/expect -f
set timeout 10
spawn su - oper
expect {
"Password:" {send "123456\r"}
}interact                #一定要加上这个,表示不中断,一直保持在oper用户下
interact                #一定要加上这个,表示不中断,一直保持在oper用户下

检查连通性的时间一定要设置超时时间,有一次有个同学检测到DB的连通性,有可能脚本执行了好几次。那telnet还在,大家都知道,DB分给应用的连接数是有限制的,导致DB连接数不够。导致维护应用的时候连接不上DB。重要吧!!!!

时间:2013-09-11 11:09:42      作者:beebol      标签: bash_profile expect      分类: Linux基础 Shell
  • 分享到:
  • 微博
  • QQ空间
  • 腾讯微博
  • 微信

Copyright © 2015 Gitblog | Proudly powered by Gitblog.