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

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

统计脚本是用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

非原创文章文中已经注明原地址,如有侵权,联系删除

关注公众号【高性能架构探索】,第一时间获取最新文章

转载文章受原作者版权保护。转载请注明原作者出处!

(0)
上一篇 2023年2月13日 上午10:44
下一篇 2023年2月13日 上午10:45

相关推荐