最近心血来潮,想看看自己平时写的乱七八糟的代码都有多少行了,就写了这个脚本。因为我的代码都写在了一个总目录里面,所以统计起来还算比较方便。
统计脚本是用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,如需转载请自行联系原作者