上一篇講的都是統計單個文件的方法,直接在命令行執行就可以。現在試試腳本的方式,統計多個文件的行數
一、統計目錄下所有文件的文件數及所有行數
腳本暫時命名為count.sh,代碼如下:
#!/bin/bash # 計算當前或者指定目錄的文件數目及所有文件的行數 fileCount=0 linesCount=0 function funCount(){ for file in `ls $1` do if [ -d $1"/"$file ];then funCount $1"/"$file else #declare -i 定義整型變量fileLines declare -i fileLines #使用的是上一篇中的一種方法,可以靈活使用其他任何一種(grep awk wc -l等) fileLines=`sed -n "$=" $1"/"$file` #let是整數運算,linux中整數運算一般通過 let 和 expr 這兩個指令來實現 #如對變量 x 加 1 可以寫作:let "x = $x + 1" 或者 x=`expr $x + 1` #個人感覺,二者差不多,前者表達比較簡單,擇優用之,具體可以在看專門的對比帖子 let linesCount=$linesCount+$fileLines let filesCount=$filesCount+1 fi done } if [ $# -gt 0 ];then for m_dir in $@ do funCount $m_dir done else funCount "." fi echo "filesCount = $filesCount" echo "linesCount = $linesCount"
1,統計當前目錄的文件數及所有行數
2,統計指定文件目錄的文件數及所有行數
二、統計目錄下所有文件的文件數及所有行數,並指出文件路徑和文件類型
腳本暫時命名為helloworldCount.sh,代碼如下:
#!/bin/bash extens=(".c" ".cpp" ".h" ".class" ".hpp" ) #這個array為空其實一樣 filesCount=0 linesCount=0 function funCount(){ for file in `ls $1` do if [ -d $1"/"$file ];then funCount $1"/"$file else fileName=$1"/"$file EXTENSION="."${fileName##*.} #echo "------"$EXTENSION # ${fileName##*.} 截取.之后的部分 echo "fileName = $fileName Extension = $EXTENSION" #if [[ "${extens[@]}/$EXTENSION/}" != "${extens[@]}" ]];then #echo "--------"${extens[@]}/$EXTENSION/ #echo "--------"${extens[@]} #/ 用來拼接多個變量並組成一個array if [[ "${extens[@]}/$EXTENSION/}" != "${extens[@]}" ]];then declare -i fileLines fileLines=`sed -n "$=" $fileName` echo $fileName":"$fileLines let linesCount=$linesCount+$fileLines let filesCount=$filesCount+1 fi fi done } if [ $# -gt 0 ];then for m_dir in $@ do funCount $m_dir done else funCount "." fi echo "filesCount = $filesCount" echo "linesCount = $linesCount"
1,統計當前目錄的文件數及所有行數
2,統計指定文件目錄的文件數及所有行數
腳本中涉及到的知識點羅列如下:
1,declare -i 定義整型變量fileLines
2,let是整數運算,linux中整數運算一般通過 let 和 expr 這兩個指令來實現,如對變量 x 加 1 可以寫作:let "x = $x + 1" 或者 x=`expr $x + 1`,個人感覺,二者差不多,前者表達比較簡單,擇優用之,具體可以在看專門的對比帖子
3,${fileName##*.} 截取.之后的部分
4,/ 用來拼接多個變量並組成一個array
參考來源:http://www.jb51.net/article/61943.htm