简单的项目规模统计方法

原创 2006年06月15日 13:32:00
因为工作的需要,花了一点点时间做了一个关于项目规模统计的shell脚本,共大家分享。

#/bin/bash

 

do_scale()

{

       echo 'Probe *.h, *.hpp, *.cc, *.c, *.cpp files, please wait ...'

       MY_FILES=`find $1 | egrep -v 'Linux_LIB' | egrep '*/.h$|*/.hpp$|*/.c$|*.cpp$|*/.cc$' | sort`

       echo '...Done!'

       # Clear dumping file

       if [ -f ./scale.dump ]; then

              mv ./scale.dump ./scale.dump.bak

       fi

       printf "Name" >> ./scale.dump

       MY_CHARS=`printf "Name" | wc -m`

       MY_CHARS=$((32-MY_CHARS))

       while [ $MY_CHARS -gt 0 ]; do

              printf " " >> ./scale.dump

              MY_CHARS=$((MY_CHARS-1))

       done

       printf "Lines" >> ./scale.dump

       MY_CHARS=`printf "Lines" | wc -m`

       MY_CHARS=$((32-MY_CHARS))

       while [ $MY_CHARS -gt 0 ]; do

              printf " " >> ./scale.dump

              MY_CHARS=$((MY_CHARS-1))

       done

       printf "Whole Path/n" >> ./scale.dump

       set -- $MY_FILES

       MY_TOTAL_FILE_NUMS=$#

       MY_TOTAL_FILE_LINE_NUMS=0

       while [ $# -gt 0 ]; do

              MY_FILE_LINE_NUMS=`cat $1 | wc -l`

              echo "$1: $MY_FILE_LINE_NUMS lines"

              MY_TOTAL_FILE_LINE_NUMS=$((MY_TOTAL_FILE_LINE_NUMS+MY_FILE_LINE_NUMS))

              MY_FILE_LINE_NUMS=`echo $MY_FILE_LINE_NUMS | tr -d ' '`

              # Dump it

              MY_FILE_NAME=`basename $1`

              printf "$MY_FILE_NAME" >> ./scale.dump

              MY_CHARS=`printf "$MY_FILE_NAME" | wc -m`

              MY_CHARS=$((32-MY_CHARS))

              while [ $MY_CHARS -gt 0 ]; do

                     printf " " >> ./scale.dump

                     MY_CHARS=$((MY_CHARS-1))

              done

              printf "$MY_FILE_LINE_NUMS" >> ./scale.dump

              MY_CHARS=`printf "$MY_FILE_LINE_NUMS" | wc -m`

              MY_CHARS=$((32-MY_CHARS))

              while [ $MY_CHARS -gt 0 ]; do

                     printf " " >> ./scale.dump

                     MY_CHARS=$((MY_CHARS-1))

              done

              printf "$1/n" >> ./scale.dump

              shift 1

       done

       echo "Total Files     : $MY_TOTAL_FILE_NUMS"

       echo "Total file lines: $MY_TOTAL_FILE_LINE_NUMS"

       echo "Total Files     : $MY_TOTAL_FILE_NUMS" >> ./scale.dump

       echo "Total file lines: $MY_TOTAL_FILE_LINE_NUMS" >> ./scale.dump

}

 

do_help()

{

       echo "[Usage]: $0 path"

}

 

# Check and setup path

if [ $# -eq 0 ]; then

       MY_PATH=`pwd`

       echo "No path and use current path: $MY_PATH"

elif [ $# -eq 1 ]; then

       MY_PATH=$1

else

       echo 'Unsupport multi-paths'

       do_help

       exit 1

fi

 

# Check whether path is valid

if [ ! -e $MY_PATH ]; then

       echo "$MY_PATH does not exist"

       exit 2

fi

 

if [ ! -d $MY_PATH ]; then

       echo "$MY_PATH is not directory"

       exit 3

fi

 

# Do scale

do_scale $1

存在的几个问题,不知道如何解决?
1)对于计算字符串的方法,这些代码被重用过多次,所以我希望能够放在一个类似于函数中,只要输入对应不同的参数来控制,但是现在因为$1会被冲掉,所以代码看上去很脏。
2)在linux下面,有什么工具可以识别函数。

请有网友多多帮助,谢谢!

对于上次所说的第一个问题,我在学习bash的帮助后,得到解决,请看下面的代码
#/bin/bash

do_scale()
{
    echo 'Probe *.h, *.hpp, *.cc, *.c, *.cpp files, please wait ...'
    MY_FILES=`find $1 | egrep -v 'Linux_LIB' | egrep '*/.h$|*/.hpp$|*/.c$|*.cpp$|*/.cc$' | sort`
    echo '...Done!'
    # Clear dumping file
    if [ -f ./scale.dump ]; then
        mv ./scale.dump ./scale.dump.bak
    fi
    printf "%-32.32s" 'Name' >> ./scale.dump
    #MY_CHARS=`printf "Name" | wc -m`
    #MY_CHARS=$((32-MY_CHARS))
    #while [ $MY_CHARS -gt 0 ]; do
    #    printf " " >> ./scale.dump
    #    MY_CHARS=$((MY_CHARS-1))
    #done
    printf "%-32.32s" 'Lines' >> ./scale.dump
    #MY_CHARS=`printf "Lines" | wc -m`
    #MY_CHARS=$((32-MY_CHARS))
    #while [ $MY_CHARS -gt 0 ]; do
    #    printf " " >> ./scale.dump
    #    MY_CHARS=$((MY_CHARS-1))
    #done
    printf "Whole Path/n" >> ./scale.dump
    set -- $MY_FILES
    MY_TOTAL_FILE_NUMS=$#
    MY_TOTAL_FILE_LINE_NUMS=0
    while [ $# -gt 0 ]; do
        MY_FILE_LINE_NUMS=`cat $1 | wc -l`
        echo "$1: $MY_FILE_LINE_NUMS lines"
        MY_TOTAL_FILE_LINE_NUMS=$((MY_TOTAL_FILE_LINE_NUMS+MY_FILE_LINE_NUMS))
        MY_FILE_LINE_NUMS=`echo $MY_FILE_LINE_NUMS | tr -d ' '`
        # Dump it
        MY_FILE_NAME=`basename $1`
        printf "%-32.32s" "$MY_FILE_NAME" >> ./scale.dump
        #MY_CHARS=`printf "$MY_FILE_NAME" | wc -m`
        #MY_CHARS=$((32-MY_CHARS))
        #while [ $MY_CHARS -gt 0 ]; do
        #    printf " " >> ./scale.dump
        #    MY_CHARS=$((MY_CHARS-1))
        #done
        printf "%-32.32s" "$MY_FILE_LINE_NUMS" >> ./scale.dump
        #MY_CHARS=`printf "$MY_FILE_LINE_NUMS" | wc -m`
        #MY_CHARS=$((32-MY_CHARS))
        #while [ $MY_CHARS -gt 0 ]; do
        #    printf " " >> ./scale.dump
        #    MY_CHARS=$((MY_CHARS-1))
        #done
        printf "$1/n" >> ./scale.dump
        shift 1
    done
    echo "Total Files     : $MY_TOTAL_FILE_NUMS"
    echo "Total file lines: $MY_TOTAL_FILE_LINE_NUMS"
    echo "Total Files     : $MY_TOTAL_FILE_NUMS" >> ./scale.dump
    echo "Total file lines: $MY_TOTAL_FILE_LINE_NUMS" >> ./scale.dump
}

do_help()
{
    echo "[Usage]: $0 path"
}

# Check and setup path
if [ $# -eq 0 ]; then
    MY_PATH=`pwd`
    echo "No path and use current path: $MY_PATH"
elif [ $# -eq 1 ]; then
    MY_PATH=$1
else
    echo 'Unsupport multi-paths'
    do_help
    exit 1
fi

# Check whether path is valid
if [ ! -e $MY_PATH ]; then
    echo "$MY_PATH does not exist"
    exit 2
fi

if [ ! -d $MY_PATH ]; then
    echo "$MY_PATH is not directory"
    exit 3
fi

# Do scale
do_scale $1
原来的很脏的代码,现在被简单的被printf的格式控制给替换,速度也提高了很多!"%-32.32s"重的‘-’表示左对齐,如果去掉‘-’,则为右对齐。

相关文章推荐

软件项目如何估计规模大小

  • 2009年07月08日 20:34
  • 11KB
  • 下载

软件项目规模估算-功能点分析

  • 2015年12月31日 17:36
  • 1.82MB
  • 下载

软件项目规模评估

顾名思义软件评估就是对软件项目的规模进度做出一个合适评估以判断软件项目的预算以及项目计划。 软件评估是软件工程的一个最底层基础,也是在软件项目实施时必经非常核心的一个步骤。对于一个软件项目,只有对其大...
  • wwwlgy
  • wwwlgy
  • 2017年04月17日 07:22
  • 548

移植项目的规模分析和测试指标的预测

在开始实施移植项目之前,都要对现有项目的规模进行分析。 一般会关注下面的一些数字: - 代码的行数 - 注释的覆盖率 - 移植后的测试用例数 - 移植过程中发现的缺陷数 - 移植的成本...

GSM载频规模计算方法

  • 2009年03月18日 22:24
  • 153KB
  • 下载

控制项目规模

作者:大卫·奎克(Dave Quick) 规模指的是软件项目的大小。完成项目需要多长时间、多少人工和资源?要实现哪些功能?质量上有什么要求?难度如何?风险有多大?要遵守哪些约束条件?这些问题的答案界...

GSM载频规模计算方法

  • 2008年12月13日 18:39
  • 25KB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:简单的项目规模统计方法
举报原因:
原因补充:

(最多只允许输入30个字)