Shell脚本实现的基于SVN的代码提交量统计工具_linux shell

最近没啥事,就用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 

以上是小编为您精心准备的的内容,在的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索shell脚本
, svn
, 统计
代码提交量
shell脚本自动更新svn、svn发布脚本 shell、shell脚本提取svn、编写shell脚本更新svn、shell svn 检出脚本,以便于您获取更多的相关知识。

时间: 2024-11-03 03:12:25

Shell脚本实现的基于SVN的代码提交量统计工具_linux shell的相关文章

Shell脚本实现的基于SVN的代码提交量统计工具

  这篇文章主要介绍了Shell脚本实现的基于SVN的代码提交量统计工具,本文直接给出实现脚本代码,需要的朋友可以参考下 最近没啥事,就用bash写了一个基于svn的代码统计小工具. 可以指定统计的目录,默认递归统计子目录. 目前还没有屏蔽指定目录的功能.哈 代码比较粗糙.不过先晒出来. ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 3

Linux shell脚本基础学习详细介绍(完整版)第1/2页_linux shell

Linux shell脚本基础学习这里我们先来第一讲,介绍shell的语法基础,开头.注释.变量和 环境变量,向大家做一个基础的介绍,虽然不涉及具体东西,但是打好基础是以后学习轻松地前提. 1. Linux 脚本编写基础 ◆1.1 语法基本介绍1.1.1 开头程序必须以下面的行开始(必须方在文件的第一行):#!/bin/sh符号#!用来告诉系统它后面的参数是用来执行该文件的程序.在这个例子中我们使用/bin/sh来执行程序.当编辑好脚本时,如果要执行该脚本,还必须使其可执行.要使脚本可执行:编译

shell脚本学习指南[六](Arnold Robbins & Nelson H.F. Beebe著)_linux shell

学shell到现在了,一直以为自己不会犯一个大家常说的非常二的问题,结果这本书最后的时候犯了个十分2的事,晚节不保啊!!!我在测试文件路径下除了通配符*和?外还能用啥正则那样的东西,结果就在$HOME下执行了rm .* ...好吧,蛋疼了一下午!还木找回任何一个配置文件.警示后人,千万别使用rm试通配符!任何时候小心使用rm! 第十四章shell可移植性议题和扩展 可以先通读这篇文章.想写出好的可移植性shell,不仅要了解各种shell版本间的差异,还要有很多编程技巧,比如尽量从环境变量中获取

shell脚本学习指南[五](Arnold Robbins & Nelson H.F. Beebe著)_linux shell

作者告诉我们:到目前为止基础已经搞定,可以将前边所学结合shell变成进军中等难度的任务了.激动的要哭了,终于看到本书结束的曙光了 T T .码字比码代码还辛苦.不过令人兴奋的是立刻就学以致用了,花了一天半的时间处理了一个3.8G的服务器日志文件,你妹啊,破电脑内存才2G.不过切割化小然后写了几个awk文件和sh文件按规则处理合并,算是搞定了! 第十一章扩展实例:合并用户数据库 问题描述就是有两台UNIX的计算机系统,这两个系统现在要合并,用户群同样需要合并.有许多用户两台系统上都有帐号.现在合

shell脚本学习指南[三](Arnold Robbins & Nelson H.F. Beebe著)_linux shell

今天木有冷笑话,只有一个噩耗.噩耗是:今天木有冷笑话!!!不要总想着冷笑话嘛,有点追求,听毛主席的话:好好学习,天天向上! 第七章输入输出.文件与命令执行 学C的应该了解标准输入输出和错误输出吧?感觉总打很多字进度太慢,所以一直在省略类似C的东西,也方便以后看这篇文章的人能够快速学完shell脚本(或者是快速看完这本书). 读取行read命令是重要方式之一,它可以自标准输入读取行后,通过shell字段切割的功能(使用$IFS)进行切分,第一部分给第一个变量,第二部分给第二个,类推.如果切割单词多

shell脚本学习指南[二](Arnold Robbins & Nelson H.F. Beebe著)_linux shell

该进入第四章了,刚才看到一个帖子标题:我空有一身泡妞的好本领,但可惜自己是个妞.汗-这个...音乐无国界嘛,这个不应该也没性别界么? 第四章文本处理工具 书中先说明了以下排序的规则,数值的就不用说了,该大就大该小就小,但是字符型很多时候是区分声调或者重音的.在命令行中输入locale查看自己系统的编码配置.默认的是系统配置里的,但是可以自己设置排序的编码.如: 复制代码 代码如下: $ LC_ALL=C sort french-english #以传统ASCII码顺序排序 下边介绍以下排序命令s

shell脚本学习指南[一](Arnold Robbins & Nelson H.F. Beebe著)_linux shell

第一章略过,下边从第二章开始,大家懂得.ps:这里发生了一件非常当我蛋疼的事情,非常!已经码文章码到第四章了,悲剧的按错浏览器按钮刷新掉,怎么也找不回来之前写的东西了.想死!算了,复习一边吧.以下全文均属自己总结书写,有错误的地方也未必是书中错误(当然也有可能是书中错误,但是我都会亲自操作滴),可能是我写错,请大牛指正. 第二章入门 因为第二遍写,就简单快速的写吧,尽量写清楚.大家都知道的终端命令cd啊 chmod啊 who啊之类的组合在一起加上一些控制语句,变量什么的就成shell编程了,给出

用shell脚本防ssh和vsftpd暴力破解的详解讲解_linux shell

脚本需求如下:此SHELL脚本放在crontab计划任务里,每隔6小时(此时间根据实际情况来定义)就去读取/var/log/secure脚本,取出里面恶意猜测IP,如果单位时间内(一星期)的连接数是高于一个阀值,例如100(此阀值也可以根据实际情况来定义),则将其加进/etc/hosts.deny黑名单里,如果低于此阀值,则无视此IP. /var/log/secure里认证失败信息如下: 复制代码 代码如下: Nov 28 10:18:08 centos2 sshd[7556]: Connect

用shell脚本监控进程是否存在 不存在则启动的实例_linux shell

用shell脚本监控进程是否存在 不存在则启动的实例,先上代码干货: #!/bin/sh ps -fe|grep processString |grep -v grep if [ $? -ne 0 ] then echo "start process....." else echo "runing....." fi ##### processString 表示进程特征字符串,能够查询到唯一进程的特征字符串 0表示存在的 $? -ne 0 不存在,$? -eq 0 存