Shell脚本实现C语言代码行数统计

 更新时间:2015年05月11日 09:18:00   投稿:junjie  
这篇文章主要介绍了Shell脚本实现C语言代码行数统计,本文直接给出实现代码,需要的朋友可以参考下

写了一个比较粗糙的C语言代码行数统计脚本,目前还有些bug,而且效率也不高。脚本主要就是去除大部分的注释后统计行数,相当于做了一部分预处理的工作。下面是代码:

#!/bin/bash 

filename=$1
echo "`whoami`"
if [ $# -lt 1 ];then
 echo "usage : ./scripts filename"
 exit -1
fi

if [ ! -f $filename ];then
 echo "$filename is not a file"
 exit 0;
fi 

user="`whoami`"
if [ "$user" != "root" ];then
 echo "use scripts with root"
 exit 0;
fi

#删除空行,空行包括:tables + space
sed '/^[[:blank:]]*$/d' $filename > "${filename}_backup"

#删除 // 所在的行
sed -i '/^[[:blank:]]*\/\//d' "${filename}_backup"

#/*xxxxx*/
#打印/*所有的开始行
grep -n '[[:blank:]]*/[*]' "${filename}_backup" | awk 'BEGIN{FS=":"}{print $1}' > "start.txt"
#打印*/所有的结束行
grep -n '[*]/[[:blank:]]*' "${filename}_backup" | awk 'BEGIN{FS=":"}{print $1}' > "end.txt"

#合并两个文件,final.txt里面每行就是/*xx....\n....xx*/这种类型注释的开始行和起始行号
paste "start.txt" "end.txt" > "final.txt"

while read line
do
 #得到起始行
 START=`echo "$line" | awk 'BEGIN{FS="\t"}{print $1}'`
 #得到结束行
 END=`echo "$line" | awk 'BEGIN{FS="\t"}{print $2}'`
 #这里有一个bug,如是/*xxxx*/中的/*和*/在同一行出现,并且有代码也在同一行
 # printf("hello world\n"); /*打印字符串*/ 
 # /*打印字符串*/
 #上面两种情况的就没法判断,希望大家优化
 if [ $START -eq $END ];then
 continue
 fi
 #删除/*到*/中间所有行
 sed -i "${START},${END}d" "${filename}_backup"
done < "final.txt"

wc -l "${filename}_backup"
rm -f "final.txt" "start.txt" "end.txt"

脚本只能实现大概的代码行数的统计,不能做到精确统计!
因为没有做很多的测试,而且也不排除有些比较少见的注释我没考虑到,另外脚本的效率也比较差,用了很多tmp文件。
所以希望大家多提提意见!

相关文章

  • 执行Shell脚本的4种方法及区别介绍

    执行Shell脚本的4种方法及区别介绍

    这篇文章主要介绍了执行Shell脚本的4种方法及区别介绍,本文讲解了相对路径方式、绝对路径方式、bash命令调用、相对或绝对方式以及说下几种方式的区别,需要的朋友可以参考下
    2015-05-05
  • awk中实现ord函数功能

    awk中实现ord函数功能

    这篇文章主要介绍了awk中实现ord函数功能,ord函数用来将字符转化对应的ascii码,本文给出awk中的ord函数实现方法,需要的朋友可以参考下
    2014-08-08
  • linux系统中的列出敏感用户的脚本代码

    linux系统中的列出敏感用户的脚本代码

    这里的敏感用户是指这个用户属于多个组,或者这个用户属于的组名跟这个用户名不一样,需要的朋友可以参考下
    2014-09-09
  • 一键配置本地yum源的shell脚本

    一键配置本地yum源的shell脚本

    这篇文章主要介绍了一键配置本地yum源的shell脚本,帮助大家更好的理解和学习shell,感兴趣的朋友可以了解下
    2020-09-09
  • linux下通过命令行获取gmail的新邮件

    linux下通过命令行获取gmail的新邮件

    在这篇文章中,我将为你展示 Linux 命令行的另一个漂亮干练的使用案例:访问 Google 的 Gmail 服务,有需要的小伙伴可以参考下。
    2015-05-05
  • 利用expect命令实现Shell自动化交互的方法详解

    利用expect命令实现Shell自动化交互的方法详解

    我们通过Shell可以实现简单的控制流功能,如:循环、判断等。下面这篇文章主要给大家介绍了关于利用expect命令实现Shell自动化交互的相关资料,文中通过示例代码介绍的非常详细,需要的朋友可以参考借鉴,下面来一起看看吧。
    2017-12-12
  • Shell监控iptables运行状态

    Shell监控iptables运行状态

    这篇文章主要介绍了Shell监控iptables运行状态,本文脚本会判断iptables的状态并选择启动或者重启动,需要的朋友可以参考下
    2014-12-12
  • Shell脚本编程30分钟入门(小结)

    Shell脚本编程30分钟入门(小结)

    这篇文章主要介绍了Shell脚本编程30分钟入门(小结),小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2019-05-05
  • Linux命令行和shell脚本编程宝典 Richard Blum

    Linux命令行和shell脚本编程宝典 Richard Blum

    Linux命令行和shell脚本编程宝典,主要介绍了linux一些命令的使用
    2012-09-09
  • Linux 无法使用userdel 删除用户和组的解决方案

    Linux 无法使用userdel 删除用户和组的解决方案

    这篇文章主要介绍了Linux 无法使用userdel 删除用户和组的解决方案的相关资料,需要的朋友可以参考下
    2017-04-04

最新评论