一个统计自己代码行数的脚本
最近心血来潮,想看看自己平时写的乱七八糟的代码都有多少行了,就写了这个脚本。因为我的代码都写在了一个总目录里面,所以统计起来还算比较方便。
统计脚本是用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选项的情况下,不会显示目录和文件,只显示最后的代码统计结果。
作 者:fengbohello
个人网站:http://www.fengbohello.top/
E-mail : fengbohello@foxmail.com
欢迎转载,转载请注明作者和出处。
因作者水平有限,不免出现遗漏和错误。希望热心的同学能够帮我指出来,我会尽快修改。愿大家共同进步,阿里嘎多~
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· DeepSeek如何颠覆传统软件测试?测试工程师会被淘汰吗?