首先说下思路:先获取到环境变量中的目录,用for循环遍历它们就可以打印出目录名,然后再用一层for循环,浏览各个目录下的文件,定义一个变量,每浏览一次该变量就+1,直至浏览完毕,这样每一次循环就能打印出每个目录下的文件数,最后将目录名和各自的文件数相继打印出来就行了。
我们先用echo命令看看$PATH环境变量中的目录:
[root@localhost ~]# echo $PATH
/usr/lib64/qt-3.3/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin
[root@localhost ~]#
我们看到,各个路径之间都由分号分隔,为了能让for循环识别,我们要把他们转换成空格才行:
sed 's/:/ /g'
新建一个变量,来保存经过转换的$PATH内容:
mypath=`echo $PATH | sed 's/:/ /g'`
转换好之后,我们开始第一层循环。第一层for循环的作用就是打印每个路径的名字:
for dir in $mypath
do
echo "$dir - 文件数"
done
然后在其中嵌入第二层循环,在每一次遍历一个目录时,对其下的所有文件也进行遍历。在第一次循环开始之前可以新建一个变量并赋值0,在第二次循环的时候每次遍历都给这个变量+1,这样,每一个目录下的文件都会有一个各自的计数,这就是该目录下的文件数:
count=0
for dir in $mypath
do
fileNum=`ls $dir`
for a in $fileNum
do
count=$[ $count+1 ]
done
echo "$dir - $count"
count=0
done
第二次循环后记得给count重新赋值0,否则这个数会一直往上涨。
写完之后ls -l一下看看这个脚本是不是可执行,如果不是要加权限哦:
chmod u+x fileNum.sh
这样,整个脚本就完成了:
#! /bin/bash
mypath=`echo $PATH | sed 's/:/ /g'`
count=0
for dir in $mypath
do
fileNum=`ls $dir`
for a in $fileNum
do
count=$[ $count+1 ]
done
echo "$dir - $count"
count=0
done
最后我们来看看跑下来的效果~
[root@localhost Tino]# ./fileNum.sh
/usr/lib64/qt-3.3/bin - 12
/usr/local/sbin - 0
/usr/local/bin - 0
/sbin - 272
/bin - 118
/usr/sbin - 275
/usr/bin - 1465
ls: cannot access /root/bin: No such file or directory
/root/bin - 0
[root@localhost Tino]#