简单的项目规模统计方法
2006-06-15 13:32
344 查看
因为工作的需要,花了一点点时间做了一个关于项目规模统计的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"重的‘-’表示左对齐,如果去掉‘-’,则为右对齐。
#/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"重的‘-’表示左对齐,如果去掉‘-’,则为右对齐。
相关文章推荐
- Visual Studio 2010 统计解决方案或项目代码总行数的最简单方法
- cocos2d-x使用python脚本创建项目的简单方法
- 为Android项目添加Proguard混淆编译的简单方法
- ios开发---ios项目生成ipa文件的真正简单可用的方法
- 使用git将项目上传到github(最简单方法)
- 通过img标签调用实现静态页面访问次数统计的简单方法
- Visual Studio写的项目在 IIS 服务器上运行的两种简单方法
- Android使用OpenCV和FFMpeg的简单方法-开源项目javacv的使用
- 史上最简单的上传项目到GitHub方法
- Honeywords项目——检查密码是否被破解的一种简单方法
- cocos2d-x使用python脚本创建项目的简单方法
- 发布自己项目让别人可以在dependencies中compile的更简单方法
- 简单是一种美:提高项目成功率的一些方法
- 超简单的qps统计方法(推荐)【转】
- 简单了解一个开源项目的方法
- 通过img标签调用实现静态页面访问次数统计的简单方法
- 一个统计代码行数的简单方法
- 开源项目cardslib简单介绍和导入eclipse并运行的方法
- 最简单方法将项目上传到github
- php简单统计在线人数的方法