上一篇讲的都是统计单个文件的方法,直接在命令行执行就可以。现在试试脚本的方式,统计多个文件的行数
一、统计目录下所有文件的文件数及所有行数
脚本暂时命名为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
欢迎扫描关注我的公众号,欢迎投稿,一起探讨技术、人生,谢谢。