最近心血来潮,想看看自己平时写的乱七八糟的代码都有多少行了,就写了这个脚本。因为我的代码都写在了一个总目录里面,所以统计起来还算比较方便。
统计脚本是用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 : %sn" ${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
View Code
执行结果如下:
$ cntline.sh -Q
all line : 90630
all file : 1136
在Q选项的情况下,不会显示目录和文件,只显示最后的代码统计结果。
原文链接: https://www.cnblogs.com/fengbohello/p/4693368.html
欢迎关注
微信关注下方公众号,第一时间获取干货硬货;公众号内回复【pdf】免费获取数百本计算机经典书籍
原创文章受到原创版权保护。转载请注明出处:https://www.ccppcoding.com/archives/219997
非原创文章文中已经注明原地址,如有侵权,联系删除
关注公众号【高性能架构探索】,第一时间获取最新文章
转载文章受原作者版权保护。转载请注明原作者出处!