Shell腳本實(shí)現(xiàn)C語(yǔ)言代碼行數(shù)統(tǒng)計(jì)
寫了一個(gè)比較粗糙的C語(yǔ)言代碼行數(shù)統(tǒng)計(jì)腳本,目前還有些bug,而且效率也不高。腳本主要就是去除大部分的注釋后統(tǒng)計(jì)行數(shù),相當(dāng)于做了一部分預(yù)處理的工作。下面是代碼:
#!/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"
#打印*/所有的結(jié)束行
grep -n '[*]/[[:blank:]]*' "${filename}_backup" | awk 'BEGIN{FS=":"}{print $1}' > "end.txt"
#合并兩個(gè)文件,final.txt里面每行就是/*xx....\n....xx*/這種類型注釋的開始行和起始行號(hào)
paste "start.txt" "end.txt" > "final.txt"
while read line
do
#得到起始行
START=`echo "$line" | awk 'BEGIN{FS="\t"}{print $1}'`
#得到結(jié)束行
END=`echo "$line" | awk 'BEGIN{FS="\t"}{print $2}'`
#這里有一個(gè)bug,如是/*xxxx*/中的/*和*/在同一行出現(xiàn),并且有代碼也在同一行
# printf("hello world\n"); /*打印字符串*/
# /*打印字符串*/
#上面兩種情況的就沒法判斷,希望大家優(yōu)化
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"
腳本只能實(shí)現(xiàn)大概的代碼行數(shù)的統(tǒng)計(jì),不能做到精確統(tǒng)計(jì)!
因?yàn)闆]有做很多的測(cè)試,而且也不排除有些比較少見的注釋我沒考慮到,另外腳本的效率也比較差,用了很多tmp文件。
所以希望大家多提提意見!
相關(guān)文章
Shell腳本中使用getopts處理多命令行選項(xiàng)
今天小編就為大家分享一篇關(guān)于Shell腳本中使用getopts處理多命令行選項(xiàng),小編覺得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來(lái)看看吧2019-03-03
linux shell進(jìn)度條實(shí)現(xiàn)方法
linux shell實(shí)現(xiàn)的一咱進(jìn)度條,代碼很簡(jiǎn)單,供大家參考2013-11-11
linux shell之控制臺(tái)打印各種顏色字體和背景的實(shí)現(xiàn)方法
今天小編就為大家分享一篇關(guān)于linux shell之控制臺(tái)打印各種顏色字體和背景的實(shí)現(xiàn)方法,小編覺得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來(lái)看看吧2019-04-04
Shell獲取路徑操作(dirname $0 pwd)的實(shí)現(xiàn)
在shell腳本中經(jīng)常會(huì)看到$(cd $(dirname $0); pwd)、basename等操作,本文主要介紹了Shell獲取路徑操作(dirname $0 pwd)的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-02-02
shell腳本實(shí)現(xiàn)mysql數(shù)據(jù)庫(kù)雙機(jī)定時(shí)備份的方法
最近有個(gè)需求,要求實(shí)現(xiàn)對(duì)某個(gè)數(shù)據(jù)庫(kù)進(jìn)行雙機(jī)備份,每天凌晨備份一次,要求主機(jī)器只保留最近十五天的記錄,我們決定用shell腳本加定時(shí)任務(wù)的方式來(lái)實(shí)現(xiàn)這個(gè)需求,接下來(lái)通過(guò)本文給大家介紹shell腳本實(shí)現(xiàn)mysql數(shù)據(jù)庫(kù)雙機(jī)定時(shí)備份的方法,感興趣的朋友一起看看吧2022-07-07

