定义一个函数detect,这是为了可以递归往子目录中操作
接着一个循环遍历`ls $1`的结果,$1是第一个输入参数,也即查找路径
在循环中,首先判断文件是否是目录文件,如果是,则递归进入里边,
否则用wc命令得到文件中行的数目,并用cut命令得到wc结果中的行数,最后把结果保存到/home/user/shell/reslt.txt里边就好啦。
最后调用下这个函数。
#!/bin/sh function detect(){ for file in `ls $1` do if [ -d $1"/"$file ] then detect $1"/"$file else wc -L $1"/"$file | cut -d' ' -f 1-2>> /home/user/shell/result.txt fi done } path="/home/user/" detect $path
wc即wordcount,可以统计文件的相关信息。
因为它的输出是“num 文件名”的形式,比如
root@ubuntu:/home/user/shell# wc -l t.sh
15 t.sh
所以要得到15的话就要使用cut命令了
ls -l | wc -l 可以用来统计当前路径下文件总数
a x dd bb x zz ccc x dd root@ubuntu:/home/user/shell# cut -d'x' -f2 ls dd zz dd root@ubuntu:/home/user/shell# cut -d'x' -f1,2 ls a x dd bb x zz ccc x dd
root@ubuntu:/home/user/shell# cut -d' ' -f1-3 ls a x dd bb x zz ccc x dd
从里面可以发现,如果输出的区域是连续的两个区域,那么分割它们的分隔符在输出的时候也是会输出的哦!
如果想要让一个变量作为分割的输入,该怎么写呢?用echo命令
var="abc x ec x dd" echo $var | cut -d'x' -f1,2 输出为abc x ec
root@ubuntu:/home/user/shell# cut -c 1-5 /home/user/shell/ls a x d bb x ccc x
#!/bin/sh path="/home/user/shell/result.txt" sum=0 while read myline do num=`echo $myline |cut -d' ' -f1` echo $num sum=`expr $num + $sum` done < $path echo "sum is "$sum这是一种方式,即
while read line
do
done < file
如下方式都可以
cat file | while read line
do
done
很奇怪的是,上面这种方式运行上面这个脚本,最后输出的sum依然是0,不知道肿么回事,好奇怪哦!难道循环里边的突然都变成局部变量了?然后修改就没用啦?
#!/bin/sh path="/home/user/data" for file in `ls $path` do new_file=${file%.*}".bat" if [ ! -e $path"/"$new_file ] then mv $path"/"$file $path"/"$new_file fi tmp=$(date +%Y%m%d:%H%M%S) tmp2=`date +%Y` echo $tmp $tmp2 done
root@ubuntu:/home/user/shell# ls d.sh ls result.txt t2.sh test2.sh t.sh root@ubuntu:/home/user/shell# mkdir dir root@ubuntu:/home/user/shell# mv t.sh t2.sh dir root@ubuntu:/home/user/shell# ls dir d.sh ls result.txt test2.sh root@ubuntu:/home/user/shell# ls dir t2.sh t.sh root@ubuntu:/home/user/shell# cd dir root@ubuntu:/home/user/shell/dir# ls ../ dir d.sh ls result.txt test2.sh root@ubuntu:/home/user/shell/dir# mv -t ../ t.sh t2.sh root@ubuntu:/home/user/shell/dir# ls root@ubuntu:/home/user/shell/dir# ls ../ dir d.sh ls result.txt t2.sh test2.sh t.sh root@ubuntu:/home/user/shell/dir#
#!/bin/sh filepath=$(pwd) echo $filepath echo "read a file name:" read name if [ -e $filepath"/"$name ] then echo "exist" else echo "not exist" fi
#!/bin/sh filepath=$(dirname $0) echo $filepath cd $(dirname $0) filepath2=$(pwd) echo $filepath2 pwd echo "read a file name:" read name if [ -e $filepath2"/"$name ] then echo "exist" else echo "not exist" fi
root@ubuntu:/home/user# ./shell/t.sh ./shell /home/user/shell /home/user/shell read a file name: t.sh exist