所管理游戏服务器在维护过程中需经常查看活跃用户数,由于开发部门后台管理系统还不完善,所以需要我协助查询,应为要经常性不定时的去查询这个数据,所以就想到了用shell脚本来提高工作效率,一下便是写此脚本的过程,分别用不同版本表示。
注:小弟初学shell,脚本难免有不妥的地方,大牛勿喷,望能给初学shell的朋友一点点的参考,如对脚本有什么看法,烦请畅所欲言。
v0.1
- #!/bin/bash
- HOST="**.**.**.**"
- USER="******"
- PASS="******"
- DATE=`date +%Y-%m-%d`
- ALL=`mysql -h${HOST} -u${USER} --password=${PASS} << EOF
- use logdb;
- SELECT COUNT(DISTINCT find) FROM player_log5 WHERE TIME>"${DATE} 00:00:00" AND TIME <="${DATE} 23:59:59" AND TYPE = 400;
- EOF`
- NEW=`mysql -h${HOST} -u${USER} --password=${PASS} << EOF
- use logdb;
- select count(*) from logdb.player_log5 where time >= "${DATE} 00:00:00" and time <= "${DATE} 23:59:59" and type = 402;
- EOF`
- echo 总登录数: ${ALL} | awk '{ print $1,$4 }'
- ALLNUM=`echo ${ALL} | awk '{ print $3 }'`
- echo 新创建数: ${NEW} | awk '{ print $1,$3 }'
- NEWNUM=`echo ${NEW} | awk '{ print $2 }'`
- #echo -e 活跃用户数:`expr $ALLNUM - $NEWNUM`
- echo -e 活跃用户数:"\033[40;35m`expr $ALLNUM - $NEWNUM`\033[0m"
说明:
1.活跃用户数粗略使用"总登录人数(ALL)-本日新创建用户数(NEW)"来计算
2.v0.1只能查询本日活跃用户数,如需查询某个时间段的活跃用户数,需修改脚本中的时间
鉴于以上不方便查看固定时间段内活跃用户数,固对脚本作了修改为v0.2
- #!/bin/bash
- HOST="**.**.**.**"
- USER="******"
- PASS="******"
- DATE=`date +%Y-%m-%d`
- function default()
- {
- ALL=`mysql -h${HOST} -u${USER} --password=${PASS} << EOF
- use logdb;
- SELECT COUNT(DISTINCT find) FROM player_log5 WHERE TIME>"${DATE} 00:00:00" AND TIME <="${DATE} 23:59:59" AND TYPE = 400;
- EOF`
- NEW=`mysql -h${HOST} -u${USER} --password=${PASS} << EOF
- use logdb;
- select count(*) from logdb.player_log5 where time >= "${DATE} 00:00:00" and time <= "${DATE} 23:59:59" and type = 402;
- EOF`
- echo 总登录数: ${ALL} | awk '{ print $1,$4 }'
- ALLNUM=`echo ${ALL} | awk '{ print $3 }'`
- echo 新创建数: ${NEW} | awk '{ print $1,$3 }'
- NEWNUM=`echo ${NEW} | awk '{ print $2 }'`
- #echo -e 活跃用户数:`expr $ALLNUM - $NEWNUM`
- echo -e 活跃用户数:"\033[40;35m`expr $ALLNUM - $NEWNUM`\033[0m"
- }
- function custom()
- {
- ALL=`mysql -h${HOST} -u${USER} --password=${PASS} << EOF
- use logdb;
- SELECT COUNT(DISTINCT find) FROM player_log5 WHERE TIME>"$1 $2" AND TIME <="$3 $4" AND TYPE = 400;
- EOF`
- NEW=`mysql -h${HOST} -u${USER} --password=${PASS} << EOF
- use logdb;
- select count(*) from logdb.player_log5 where time >= "$1 $2" and time <= "$3 $4" and type = 402;
- EOF`
- echo 总登录数: ${ALL} | awk '{ print $1,$4 }'
- ALLNUM=`echo ${ALL} | awk '{ print $3 }'`
- echo 新创建数: ${NEW} | awk '{ print $1,$3 }'
- NEWNUM=`echo ${NEW} | awk '{ print $2 }'`
- #echo -e 活跃用户数:`expr $ALLNUM - $NEWNUM`
- echo -e 活跃用户数:"\033[40;35m`expr $ALLNUM - $NEWNUM`\033[0m"
- }
- if [ $# = 0 ];then
- default
- else
- custom $1 $2 $3 $4
- fi
说明:
1.v0.2加入了if判断,如果传入脚本没有参数则查看今日活跃用户数,如果有参数则查看参数内时间段的活跃用户数(如果参数错误无法判断,这个用政策匹配太难做了,尤其是月份的匹配,每个月还不一致,故放弃)
2.脚本太长,太繁琐
基于以上两点原因,从优化脚本长度,更加人性化方面对脚本做了修改,形成了一下v0.3版本
v0.3
- #!/bin/bash
- #write in 2012/05/07 by lf
- HOST="**.**.**.**"
- USER="******"
- PASS="******"
- DATE=`date +%Y-%m-%d`
- function custom()
- {
- ALL=`mysql -h${HOST} -u${USER} --password=${PASS} << EOF
- use logdb;
- SELECT COUNT(DISTINCT find) FROM player_log5 WHERE TIME>"$1 $2" AND TIME <="$3 $4" AND TYPE = 400;
- EOF`
- NEW=`mysql -h${HOST} -u${USER} --password=${PASS} << EOF
- use logdb;
- select count(*) from logdb.player_log5 where time >= "$1 $2" and time <= "$3 $4" and type = 402;
- EOF`
- echo 总登录数: ${ALL} | awk '{ print $1,$4 }'
- ALLNUM=`echo ${ALL} | awk '{ print $3 }'`
- echo 新创建数: ${NEW} | awk '{ print $1,$3 }'
- NEWNUM=`echo ${NEW} | awk '{ print $2 }'`
- #echo -e 活跃用户数:`expr $ALLNUM - $NEWNUM`
- echo -e 活跃用户数:"\033[40;35m`expr $ALLNUM - $NEWNUM`\033[0m"
- }
- if [ $# = 0 ];then
- custom ${DATE} 00:00:00 ${DATE} 23:59:59
- else
- if [ $# != 4 ];then
- echo "参数错误,参数格式为[2012-05-07 00:00:00 2012-05-07 14:59:59]"
- else
- custom $1 $2 $3 $4
- fi
- fi
说明:
1.脚本优化了代码长度,无需太过繁琐的用两个函数来表现
2.更加人性化,当输入错误参数个数时,人性化的提示参数的个数以及各式
转载于:https://blog.51cto.com/liufeily/871784