shell统计C代码行数
好久没有写过什么东西,写一下积累一下,也没有写过什么shell,写一个shell统计C程序代码行数试试。
具体代码如下
#目的:该shell的目的是统计代码的行数
#作者:asq
#日期:2016-11-07
#说明:需要先删除/**/行注释,再删除这个段注释,此外不能有嵌套的#if 0 #endif
#!/bin/sh
folder="."
res_path="count_res"
tmp=${res_path}"/"
#第0步设置保存文件的目录
if [ ! -d ${res_path} ]; then
mkdir ${res_path}
else
rm -rf ${res_path}/*
fi
#第一步去掉^M字符
for org_name in ${folder}/*.c; do
new_name=${tmp}`basename $org_name`
tr -d "\015" < ${org_name} > ${new_name}
done
for org_name in ${folder}/*.h; do
new_name=${tmp}`basename $org_name`
tr -d "\015" < ${org_name} > ${new_name}
done
#第二步删除一些东西
#2.1删除空行
for file_name in ${res_path}/* ;do
sed -i "/^[[:blank:]]*$/d" ${file_name}
done
#2.2删除/**/行注释
for file_name in ${res_path}/* ;do
#sed -i "/^[[:blank:]]*\/\*.*\*\/[[:blank:]]*$/d" ${file_name}
#不知道怎么了上面的就是删除不了,那就用grep吧
new_name=${tmp}"new_"`basename ${file_name}`
grep -v "^[[:blank:]]*\/\*.*\*\/[[:blank:]]*$" ${file_name} > ${new_name}
rm ${file_name}
done
#exit 0
#2.3删除/**/段注释
for file_name in ${res_path}/* ;do
sed -i "/^[[:blank:]]*\/\*.*/,/^[[:blank:]]*.*\*\/$/d" ${file_name}
done
#2.4删除#if 0 #endif段注释
for file_name in ${res_path}/* ;do
#if 0后面可能有注释
sed -i "/^[[:blank:]]*#if[[:blank:]][[:blank:]]*0.*/,/^[[:blank:]]*#endif.*/d" ${file_name}
done
#2.5删除//行注释
for file_name in ${res_path}/* ;do
sed -i "/^[[:blank:]]*\/\/.*/d" ${file_name}
done
#2.6删除单独的}{,暂时留下
#第三步统计
echo "the total line of the program is:"`grep -nr "" ${tmp} | wc -l` > ${tmp}result.txt
echo "finish counting the code's lines, see result in count_res/result.txt"
exit 0