所管理游戏服务器在维护过程中需经常查看活跃用户数,由于开发部门后台管理系统还不完善,所以需要我协助查询,应为要经常性不定时的去查询这个数据,所以就想到了用shell脚本来提高工作效率,一下便是写此脚本的过程,分别用不同版本表示。

      注:小弟初学shell,脚本难免有不妥的地方,大牛勿喷,望能给初学shell的朋友一点点的参考,如对脚本有什么看法,烦请畅所欲言。

v0.1

  1. #!/bin/bash 
  2. HOST="**.**.**.**" 
  3. USER="******" 
  4. PASS="******" 
  5. DATE=`date +%Y-%m-%d` 
  6.  
  7. ALL=`mysql -h${HOST} -u${USER--password=${PASS} << EOF 
  8.           use logdb; 
  9.           SELECT COUNT(DISTINCT find) FROM player_log5 WHERE TIME>"${DATE} 00:00:00" AND TIME <="${DATE} 23:59:59" AND TYPE = 400; 
  10. EOF` 
  11.  
  12. NEW=`mysql -h${HOST} -u${USER--password=${PASS} << EOF 
  13.           use logdb; 
  14.           select count(*) from logdb.player_log5 where time >= "${DATE} 00:00:00" and time <= "${DATE} 23:59:59" and type = 402; 
  15. EOF` 
  16.  
  17. echo 总登录数: ${ALL} | awk '{ print $1,$4 }' 
  18. ALLNUM=`echo ${ALL} | awk '{ print $3 }'
  19.  
  20. echo 新创建数: ${NEW} | awk '{ print $1,$3 }' 
  21. NEWNUM=`echo ${NEW} | awk '{ print $2 }'
  22.  
  23. #echo -e 活跃用户数:`expr $ALLNUM - $NEWNUM` 
  24. echo -e 活跃用户数:"\033[40;35m`expr $ALLNUM - $NEWNUM`\033[0m" 

说明:

1.活跃用户数粗略使用"总登录人数(ALL)-本日新创建用户数(NEW)"来计算

2.v0.1只能查询本日活跃用户数,如需查询某个时间段的活跃用户数,需修改脚本中的时间

    鉴于以上不方便查看固定时间段内活跃用户数,固对脚本作了修改为v0.2

  1. #!/bin/bash 
  2. HOST="**.**.**.**" 
  3. USER="******" 
  4. PASS="******" 
  5. DATE=`date +%Y-%m-%d` 
  6.  
  7. function default() 
  8. ALL=`mysql -h${HOST} -u${USER--password=${PASS} << EOF 
  9.           use logdb; 
  10.           SELECT COUNT(DISTINCT find) FROM player_log5 WHERE TIME>"${DATE} 00:00:00" AND TIME <="${DATE} 23:59:59" AND TYPE = 400; 
  11. EOF` 
  12.  
  13. NEW=`mysql -h${HOST} -u${USER--password=${PASS} << EOF 
  14.           use logdb; 
  15.           select count(*) from logdb.player_log5 where time >= "${DATE} 00:00:00" and time <= "${DATE} 23:59:59" and type = 402; 
  16. EOF` 
  17.  
  18. echo 总登录数: ${ALL} | awk '{ print $1,$4 }' 
  19. ALLNUM=`echo ${ALL} | awk '{ print $3 }'
  20.  
  21. echo 新创建数: ${NEW} | awk '{ print $1,$3 }' 
  22. NEWNUM=`echo ${NEW} | awk '{ print $2 }'
  23.  
  24. #echo -e 活跃用户数:`expr $ALLNUM - $NEWNUM` 
  25. echo -e 活跃用户数:"\033[40;35m`expr $ALLNUM - $NEWNUM`\033[0m" 
  26.  
  27.  
  28. function custom() 
  29. ALL=`mysql -h${HOST} -u${USER--password=${PASS} << EOF 
  30.           use logdb; 
  31.           SELECT COUNT(DISTINCT find) FROM player_log5 WHERE TIME>"$1 $2" AND TIME <="$3 $4" AND TYPE = 400; 
  32. EOF` 
  33.  
  34. NEW=`mysql -h${HOST} -u${USER--password=${PASS} << EOF 
  35.           use logdb; 
  36.           select count(*) from logdb.player_log5 where time >= "$1 $2" and time <= "$3 $4" and type = 402; 
  37. EOF` 
  38.  
  39. echo 总登录数: ${ALL} | awk '{ print $1,$4 }' 
  40. ALLNUM=`echo ${ALL} | awk '{ print $3 }'
  41.  
  42. echo 新创建数: ${NEW} | awk '{ print $1,$3 }' 
  43. NEWNUM=`echo ${NEW} | awk '{ print $2 }'
  44.  
  45. #echo -e 活跃用户数:`expr $ALLNUM - $NEWNUM` 
  46. echo -e 活跃用户数:"\033[40;35m`expr $ALLNUM - $NEWNUM`\033[0m" 
  47.  
  48. if [ $# = 0 ];then 
  49.         default 
  50. else 
  51.         custom $1 $2 $3 $4 
  52. fi 

说明:

1.v0.2加入了if判断,如果传入脚本没有参数则查看今日活跃用户数,如果有参数则查看参数内时间段的活跃用户数(如果参数错误无法判断,这个用政策匹配太难做了,尤其是月份的匹配,每个月还不一致,故放弃)

2.脚本太长,太繁琐

    基于以上两点原因,从优化脚本长度,更加人性化方面对脚本做了修改,形成了一下v0.3版本

v0.3

  1. #!/bin/bash 
  2. #write in 2012/05/07 by lf 
  3. HOST="**.**.**.**" 
  4. USER="******" 
  5. PASS="******" 
  6. DATE=`date +%Y-%m-%d` 
  7.  
  8. function custom() 
  9. ALL=`mysql -h${HOST} -u${USER--password=${PASS} << EOF 
  10.           use logdb; 
  11.           SELECT COUNT(DISTINCT find) FROM player_log5 WHERE TIME>"$1 $2" AND TIME <="$3 $4" AND TYPE = 400; 
  12. EOF` 
  13.  
  14. NEW=`mysql -h${HOST} -u${USER--password=${PASS} << EOF 
  15.           use logdb; 
  16.           select count(*) from logdb.player_log5 where time >= "$1 $2" and time <= "$3 $4" and type = 402; 
  17. EOF` 
  18.  
  19. echo 总登录数: ${ALL} | awk '{ print $1,$4 }' 
  20. ALLNUM=`echo ${ALL} | awk '{ print $3 }'
  21.  
  22. echo 新创建数: ${NEW} | awk '{ print $1,$3 }' 
  23. NEWNUM=`echo ${NEW} | awk '{ print $2 }'
  24.  
  25. #echo -e 活跃用户数:`expr $ALLNUM - $NEWNUM` 
  26. echo -e 活跃用户数:"\033[40;35m`expr $ALLNUM - $NEWNUM`\033[0m" 
  27.  
  28. if [ $# = 0 ];then 
  29.         custom ${DATE} 00:00:00 ${DATE} 23:59:59 
  30. else 
  31.         if [ $# != 4 ];then 
  32.                 echo "参数错误,参数格式为[2012-05-07 00:00:00 2012-05-07 14:59:59]" 
  33.         else 
  34.                 custom $1 $2 $3 $4 
  35.         fi 
  36. fi 

说明:

1.脚本优化了代码长度,无需太过繁琐的用两个函数来表现

2.更加人性化,当输入错误参数个数时,人性化的提示参数的个数以及各式