linux 代码统计工具,Shell脚本实现的基于SVN的代码提交量统计工具
最近没啥事,就用bash写了一个基于svn的代码统计小工具。 可以指定统计的目录,默认递归统计子目录。
目前还没有屏蔽指定目录的功能。哈 代码比较粗糙。不过先晒出来。
#!/bin/bash -
#""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
# FILE: lines.sh
#
# USAGE: ./lines.sh [dir]
# AUTHOR: william
#
# DESCRIPTION: 基于SVN的代码提交量统计工具
# OPTIONS: ---
# CREATED: 06/05/2012 12:49:20 PM CST
#"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
set -o nounset # Treat unset variables as an error
# 关注的文件类型 后罪名
FILES_TYPE="*.cpp *.h *.lua"
# 需要统计的人员,在这里写入需要统计的人,用空格隔开。哈还不智能
declare -r CODER_LIST="coder1 coder2"
declare -i coder1
declare -i coder2
declare -r USAGE="Usage: $0 [dir]. default dir is current dir.\n"
# ERROR CODES;
declare -r E_BAD_PATH=1
declare -r E_INVAILED_ARGU=2
declare -r E_NOT_SVN_DIR=3
#TODO 屏蔽一些dir 还没写哈
# TODO other way get path not with / end
getpath()
{
#debug
#echo dir_name: ${dir_name}
#echo base_name: ${base_name}
if [ $dir_name == "/" ] || [ $base_name == "/" ]; then
work_path="/"
else
work_path=${dir_name}/${base_name}
fi
}
statistic_codelines()
{
if [ -z "$1" ]; then
echo "ERROR statistic_codelines not argument"
return
fi
local pwd_length=${#PWD}
echo "--------------------------"
echo "${PWD}"
for coder in $CODER_LIST; do
local num=$(echo "$1" | grep ${coder} | wc -l)
(( ${coder} += num ))
if [ $num -ne 0 ]; then
printf "%10s | %-7d\n" ${coder} $num
fi
done
echo "--------------------------"
}
# init check argument set work_path
init_work_path()
{
if [ $# -eq 1 ]; then
if [ $1 == "-h" ]; then # is help
echo -e "$USAGE"
elif [ -d $1 ]; then
dir_name=$(dirname ${1})
base_name=$(basename ${1})
getpath;
else
echo -e "An invailed argument"
echo -e "Use -h get help."
exit $E_INVAILED_ARGU
fi
fi
}
# check work_path
check_work_path()
{
if [ -z $work_path ] || [ ! -d $work_path ]; then
exit $E_BADPATH;
fi
}
# enter work_path
enter_work_path()
{
cd ${work_path}
if [ ! $? ]; then
echo "Can not enter ${work_path} "
fi
}
# check work_pat is a svn dir
is_svn_dir()
{
(
# check if current dir is asvn dir
svn info &> /dev/null
exit $?
)
return $?
}
action()
{
local dir_name=.
local base_name=
local work_path=$dir_name
init_work_path $1
check_work_path
enter_work_path #todo can't enter
#echo "NOW DIR: $PWD, OLD DIR $OLDPWD"
is_svn_dir
#todo to next dir
local ret=$?
if [ $ret -ne 0 ]
then
echo -e "Current dir \"${work_path}\" not a svn dir."
exit $E_NOT_SVN_DIR
fi
# get source files
local files=$(ls ${FILES_TYPE} 2> /dev/null)
if [ -n "$files" ]; then
local namelist=$(echo -n ${files} | xargs -n 1 svn blame | awk '{print $2}')
#svn blame $files #| grep $1 | wc -l
statistic_codelines "$namelist"
fi
local sub_dirs=$(find -maxdepth 1 -type d -name "[^.]*" 2>/dev/null)
if [ -n "$sub_dirs" ]; then
for dir in $sub_dirs ; do
action "$dir"
done
fi
cd ..
}
total()
{
echo "-------- TOTOAL ----------"
echo " NAME | lines "
echo "--------------------------"
for coder in $CODER_LIST; do
if [ ${!coder} -ne 0 ]; then
printf "%10s | %-7d\n" ${coder} ${!coder}
fi
done
echo "--------------------------"
}
# main
echo "-----开始统计,请耐心等待.... :) "
action $1
total
exit 0
linux 代码统计工具,Shell脚本实现的基于SVN的代码提交量统计工具相关推荐
- linux运维自动化脚本,linux运维自动化shell脚本小工具
linux运维shell 脚本小工具,如要分享此文章,请注明文章出处,以下脚本仅供参考,若放置在服务器上出错,后果请自负 1.检测cpu剩余百分比 #!/bin/bash #Inspect CPU # ...
- linux 命令行与shell脚本编程大全
linux 命令行与shell脚本编程大全 第一章 Linux LiveCD就是从cd读取的系统,由于没法将数据写入到cd,所以一旦重启,之前操作过后的一切数据都会丢失. 第二章 第三章 1.man手 ...
- Linux命令行与shell脚本编程大全:第2版
<Linux命令行与shell脚本编程大全:第2版> 基本信息 作者: (美)布卢姆(Blum,R.) 布雷斯纳汉(Bresnahan.C.) [作译者介绍] 译者: 武海峰 丛书名: 图 ...
- Linux_《Linux命令行与shell脚本编程大全》第十章学习总结
时间:2017年08月24日星期四 说明:本文部分内容均摘取自书籍<Linux命令行与shell脚本编程大全>,版权归原作者所有.<Linux命令行与shell脚本编程大全>( ...
- 《Linux命令行与Shell脚本编程大全第2版.布卢姆》pdf
下载地址:网盘下载 内容简介 · · · · · · 本书是一本关于Linux 命令行与shell 脚本编程的全面教程.全书分为四部分:第一部分介绍Linuxshell 命令行:第二部分介绍shel ...
- 《linux命令行与shell脚本编程大全》第三版 - 核心笔记(3/4):函数与图形化脚本
<linux命令行与shell脚本编程大全> 全书4部分: ☆ [1]linux命令行(1-10章) ☆ [2]shell脚本编程基础(11-16章) ☆ [3]高级shell脚本编程(1 ...
- linux脚本求命令行上整数和,《Linux命令行与shell脚本编程大全》 第二十二章 学习札记...
<Linux命令行与shell脚本编程大全> 第二十二章 学习笔记 第二十二章:使用其他shell 什么是dash shell Debian的dash shell是ash shell的直系 ...
- Linux下如何执行Shell脚本
Linux下如何执行Shell脚本 Linux下你可以有两种方式执行Shell脚本: 1.用shell程序执行脚本:根据你的shell脚本的类型,选择shell程序,常用的有sh,bash,tcsh等 ...
- Linux下eclipse中shell脚本编程环境的搭建
注意:本文所用到的linux发行版是fedora 15.如果用fedora 15以上的版本可能会有问题.至于解决方案或者是搭建方法我会尽量抽出时间写一篇新的博客... 本文主要是介绍在linux平台下 ...
最新文章
- Material-UI使用
- windows cmd post请求_cmd命令集合
- 软件测试中的存根程序
- 创业者ALL IN区块链的5条建议
- Flutter RichText 使用案例解析 Flutter WidgetSpan 设置图片显示
- php jquery进度条,如何实现jQuery进度条效果
- ruby Enumerator::lazy
- jQuery 元素移除empty() remove()与detach()的区别?
- 表格制作模块xlwt
- 《HTML与CSS入门经典(第8版)》——导读
- MySQL 聚合函数以及 优先级
- SkinSharp函数文档
- 网易云音乐android变臃肿,网易云音乐版权少,为什么用户还能突破8亿??
- Centos8下nginx源码编译安装
- matlab求解指派问题最优解的函数
- 虚拟usb打印机服务器,usb打印机服务器 云盘
- JUCE学习笔记05-音频输出基础(白噪)
- 配置微信公众号之公众号绑定小程序
- mysql如何提高查询效率_MySQL调优系列——如何提高MySQL的查询效率
- python元组定义_python定义元组
热门文章
- java socket程序_java 简单的java socket程序
- 千元显卡玩转百亿大模型,清华推出工具包BMInf让模型推理轻而易举
- Github 本周最热的 10 款「机器学习」开源项目 | PaperDaily #27
- Numpy-随机生成以及矩阵的运算
- ant react 上传_react之ant design mobile如何只能上传一张图片
- python 支付宝个人账单_解析2018年度三大用户数据报告——网易云音乐、支付宝、微信...
- 【Java代码】使用双冒号 :: 简洁代码及方法引用(静态方法+构造方法+实例方法+函数式编程举例)
- springboot Field userInfoInter in com.**.** required a bean of type ‘***.**‘
- 启动设备ar1失败 错误代码2_设备启动系列(2)寿力空压机
- Spring Boot-切换嵌入式Servlet容器