一个统计自己代码行数的脚本

简介:

最近心血来潮,想看看自己平时写的乱七八糟的代码都有多少行了,就写了这个脚本。因为我的代码都写在了一个总目录里面,所以统计起来还算比较方便。

统计脚本是用shell写的,支持4个参数,-[qQhd],其中

h  :为帮助参数,显示如下的帮助信息

复制代码
$ cntline.sh -h
Usage : cntline.sh -[qQhd]
    -q : not show dir
    -Q : not show file name
    -h : show this help message
    -d : only show dirs
复制代码

q  :不显示目录,只显示文件和文件行数

Q  :不显示文件和目录,只显示总的代码行数

d  :只显示目录

 

脚本中还支持文件类型过滤,因为我主要搞C/C++方向,但是偶尔也学习一下其他的语言,所以增加了这么一个过滤的功能。不过过滤的选项还不能在命令的参数中体现,需要修改脚本中的过滤变量FILTER="\.cpp$|\.c$|\.html|\.h$|\.go$|\.py$|\.sh$"。另一个存在的问题是,只能从shell当前的目录开始进行统计~_~。

代码如下:(点开折叠就可以显示全部)

复制代码
  1 $ cat bin/cntline.sh 
  2 #!/bin/bash
  3 
  4 ALL_LINE=0
  5 ALL_FILE=0
  6 FILES=""
  7 FILTER="\.cpp$|\.c$|\.html|\.h$|\.go$|\.py$|\.sh$"
  8 CVRT_FILTER=""
  9 BE_QUITE_DIR=1
 10 BE_QUITE_FILE=1
 11 SHOW_HELP=0
 12 ONLY_SHOW_DIR=0
 13 
 14 function showHelp()
 15 {
 16     MY_NAME=`basename ${0}`
 17     echo "Usage : ${MY_NAME} -[qQhd]"
 18     echo -e "\t-q : not show dir"
 19     echo -e "\t-Q : not show file name"
 20     echo -e "\t-h : show this help message"
 21     echo -e "\t-d : only show dirs"
 22 }
 23 
 24 set -- `getopt -q v:qQhd "$@"`
 25 #echo -e "grev : $@"
 26 while [ -n "$1" ]
 27 do
 28     case "$1" in
 29         -v) 
 30         CVRT_FILTER="${CVRT_FILTER} $2"
 31         shift
 32         ;;
 33         -q)
 34         BE_QUITE_DIR=0
 35         shift
 36         ;;
 37         -Q)
 38         BE_QUITE_DIR=0
 39         BE_QUITE_FILE=0
 40         shift
 41         ;;
 42         -h)
 43         SHOW_HELP=1
 44         shift
 45         ;;
 46         -d)
 47         ONLY_SHOW_DIR=1
 48         shift
 49         ;;
 50     esac
 51     shift
 52 done
 53 
 54 function showGrade()
 55 {
 56     if [ $# -gt 0 ] && [ $1 -gt 0 ]; then
 57         for ((i = 0; i < $1; i++)) ; do
 58             echo -n "   "
 59         done
 60     fi
 61 }
 62 
 63 function a_count_dir()
 64 {
 65     local file_list=`ls -Sr . | grep -E ${FILTER}`
 66     local dir_list=`ls .`
 67     local CURT_DIR=`pwd`
 68 
 69     if ! [ -z "${file_list}" ];then
 70         if [ ${BE_QUITE_DIR} -eq 1 ];then
 71             echo -e "${CURT_DIR}"
 72         fi
 73     fi
 74     # scan files
 75     for x in ${file_list} ; do
 76         if [ -f ${x} ]; then
 77             local count_line=`cat ${x} | wc -l`
 78             ALL_LINE=$[ ${ALL_LINE} + ${count_line} ]
 79             ALL_FILE=$[ ${ALL_FILE} + 1 ]
 80             if [ ${BE_QUITE_FILE} -eq 1 ];then
 81                 printf "%5d : %s\n" ${count_line} ${x}
 82             fi
 83         else
 84             continue
 85         fi
 86     done
 87 
 88     # scan dirs
 89     for x in ${dir_list} ;do
 90         if [ -f ${x} ]; then
 91             continue
 92         else
 93             local NOE_DIR=`pwd`
 94             cd ${x}
 95             a_count_dir $[ ${1} + 1 ]
 96             cd ${NOE_DIR}
 97         fi
 98     done
 99 }
100 
101 function count_dir()
102 {
103     a_count_dir 0
104     echo "all line : ${ALL_LINE}"
105     echo "all file : ${ALL_FILE}"
106 }
107 
108 function showDir()
109 {
110     local CURRENT_DIR=`pwd`
111     echo -e "${CURRENT_DIR}"
112     local list=`ls`
113     for x in ${list}; do
114         if [ -f ${x} ];then
115             continue
116         else
117             local NOW_DIR=${CURRENT_DIR}
118             cd ${x}
119             showDir
120             cd ${NOW_DIR}
121         fi
122     done
123 }
124 
125 if [ ${SHOW_HELP} -eq 1 ];then
126     showHelp
127     exit 0
128 fi
129 
130 if [ ${ONLY_SHOW_DIR} -eq 1 ];then
131     showDir
132     exit 0
133 fi
134 
135 count_dir
复制代码

执行结果如下:

$ cntline.sh  -Q
all line : 90630
all file : 1136

在Q选项的情况下,不会显示目录和文件,只显示最后的代码统计结果。



本文转自郝峰波博客园博客,原文链接:http://www.cnblogs.com/fengbohello/p/4693368.html,如需转载请自行联系原作者


相关文章
|
6月前
|
测试技术
包含用例执行时间的测试报告代码
包含用例执行时间的测试报告代码
|
Web App开发 JavaScript 关系型数据库
|
SQL 自然语言处理 前端开发
wc 统计已过时,cloc 每一行代码都有效
我们通常用代码量来评判一个程序员技术的高低或一个项目的大小,阅读新项目源码时,也需要了解其代码量,心里有个预期。那如何统计代码量呢?
wc 统计已过时,cloc 每一行代码都有效
|
XML 前端开发 JavaScript
项目代码行数统计
了解代码统计的几种方式
908 0
项目代码行数统计
|
Java
我们公司用了7年的代码执行耗时统计功能,太优雅了!!
我们公司用了7年的代码执行耗时统计功能,太优雅了!!
149 0
C# 统计程序执行时间
随便写写,小马哥勿怪    最近悟出来一个道理,在这儿分享给大家:学历代表你的过去,能力代表你的现在,学习代表你的将来。    十年河东十年河西,莫欺少年穷。     话说马云年轻的时候也是屌丝一枚,有图为证      现在的马云依然是亚洲首富啊(有图为证),所以嘛,十年河东十年河西,莫欺少年穷。
1838 0
|
测试技术 PHP BI
php代码覆盖率统计实践
一、需求描述 由于我司的业务大部分都是php项目,在实际的测试任务中,有测试工程师反馈存在测试结束后无法对测试覆盖率保有自信,担心存在漏测行为;本项目将作为漏测的辅助判断存在,帮助测试工程师进行是否存在漏测的辅助判断。
1352 0
|
JavaScript 前端开发