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


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

    统计脚本是用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 "	-q : not show dir"
     19     echo -e "	-Q : not show file name"
     20     echo -e "	-h : show this help message"
     21     echo -e "	-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
    " ${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选项的情况下,不会显示目录和文件,只显示最后的代码统计结果。

  • 相关阅读:
    内存、时间复杂度、CPU/GPU以及运行时间
    内存、时间复杂度、CPU/GPU以及运行时间
    四叉树问题
    四叉树问题
    基于深度学习的人脸识别系统(Caffe+OpenCV+Dlib)【三】VGG网络进行特征提取
    爬楼梯问题种种
    爬楼梯问题种种
    Python 在线笔试
    基于深度学习的人脸识别系统(Caffe+OpenCV+Dlib)【二】人脸预处理
    标准模板库 STL 使用之 —— vector 使用 tricks
  • 原文地址:https://www.cnblogs.com/fengbohello/p/4693368.html
Copyright © 2020-2023  润新知