Linux shell代码统计工具

  

    只能统计*.c类型文件,如果需要统计*.h和*.c的,需修改shell; 结果显示支持中/英文,统计150个*.c文件50w行,大约耗费8s。


#!/bin/sh

#判断是否传入参数   
if [ $# -eq 0 ];then
	echo "Usge: ./shellname dirname [en/cn]"
	exit 1	
fi

#获取统计目录名和输出语言类型
dir_name=$1
lang_type=$2
result_file="code_info.txt"

sum_files=0;
sum_alllines=0;
sum_codelines=0;
sum_nocommentlines=0;
sum_commentslines=0;
sum_blanklines=0;

#检测参数是否是一个目录
if [ ! -d $dir_name ];then
	echo "$dir_name is not a directory!"
	exit 2
fi


#函数 - 统计所有文件总数
Files_TotalNum()
{
	sum_files=$(find $dir_name -name "*.c" | wc -l);
#	echo $sum_files;
	return 0;
}

#函数 - 统计所有文件行总数
AllLines_TotalNum()
{
	sum_alllines=$(find $dir_name -name "*.c" | xargs cat | wc -l);
#	echo $sum_alllines;
	return 0;
}


#函数 - 统计所有代码行总数
CodeLines_TotalNum()
{
	sum_codelines=$(find $dir_name -name "*.c" | xargs cat | grep -v '^[[:space:]]*$'|grep -v '^[[:space:]]*\/\/' |sed '/\/\*/,/\*\//d' | wc -l);
#	echo $sum_codelines;
	return 0;	
}



#函数 - 统计所有注释行总数
Comments_TotalNum()
{
	sum_nocommentlines=$(find $dir_name -name "*.c" | xargs cat |  sed '/\/\*/,/\*\//d' | sed '/\/\//d'|wc -l);
	let sum_commentslines=sum_alllines-sum_nocommentlines;
#	echo $sum_commentslines;
	return 0;	
}

#noteLine=10
#line=100
#awk 'BEGIN{printf "%.2f%\n",('$noteLine'/'$line')*100}'


#函数 - 统计所有空白行总数
BlankLines_TotalNum()
{
	sum_blanklines=$(find $dir_name -name "*.c" | xargs cat | grep '^[[:space:]]*$' |wc -l);
#	echo $sum_blanklines;
	return 0;
}


#函数 - 定义统计(英文)
Statistics_Func_EN()
{
	Files_TotalNum;
	AllLines_TotalNum;
	CodeLines_TotalNum;
	Comments_TotalNum;
	BlankLines_TotalNum;
	
#	echo "en $1";
	echo "=======Statistics Result===========" 	>> $result_file
	echo "$(date)"  							>> $result_file
	echo -n "Directory Name: "					>> $result_file
	echo $dir_name								>> $result_file
	echo "" 									>> $result_file
	echo -n "Files    Sum: "					>> $result_file
	echo $sum_files								>> $result_file
	echo -n "Total   line: "					>> $result_file
	echo $sum_alllines							>> $result_file
	echo -n "Code    line: "					>> $result_file
	echo $sum_codelines							>> $result_file
	echo -n "Blank   line: "					>> $result_file
	echo $sum_blanklines 						>> $result_file
	echo -n "Comment line: "					>> $result_file
	echo $sum_commentslines 					>> $result_file
	echo -n "Comment rate: " 					>> $result_file
	awk 'BEGIN{printf "%.2f%\n",('$sum_commentslines'/'$sum_alllines')*100}'>> $result_file
	echo "===================================" 	>> $result_file

	return 0;
}

#函数 - 定义统计(中文)
Statistics_Func_CN()
{
	Files_TotalNum;
	AllLines_TotalNum;
	CodeLines_TotalNum;
	Comments_TotalNum;
	BlankLines_TotalNum;
	
#	echo "en $1";
	echo "=============统计结果==============" 	>> $result_file
	echo "$(date)"  							>> $result_file
	echo -n "统计目录名: "						>> $result_file
	echo $dir_name								>> $result_file
	echo "" 									>> $result_file
	echo -n "文件数量:   "						>> $result_file
	echo $sum_files								>> $result_file
	echo -n "文件总行数: "						>> $result_file
	echo $sum_alllines							>> $result_file
	echo -n "代码总行数: "						>> $result_file
	echo $sum_codelines							>> $result_file
	echo -n "空白总行数: "						>> $result_file
	echo $sum_blanklines 						>> $result_file
	echo -n "注释总行数: "						>> $result_file
	echo $sum_commentslines 					>> $result_file
	echo -n "代码注释率: " 						>> $result_file
	awk 'BEGIN{printf "%.2f%\n",('$sum_commentslines'/'$sum_alllines')*100}'>> $result_file
	echo "===================================" 	>> $result_file

	return 0;
}

echo "Statistics Start!"
#根据语言类型,输出统计结果(默认语言为英文)
if [ "$lang_type" = "cn" ];then
	echo "Output Language is Chinese!"
	Statistics_Func_CN $dir_name 
else
	echo "Output Language is English!"
	Statistics_Func_EN $dir_name
fi

echo "Statistics End!"


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值