shell脚本初学 遍历目录下的文件

时间:2021-08-06 23:52:38

前天接到一个小任务,写一个shell脚本,负责对文件根据日期归类统计,之前没有写过shell脚本,只知道sh文件可以直接在命令窗口执行,瞎折腾了半天,也算是完成了一半的任务(等我写好了,头儿早已经写好了),不过自己还是学习了一下,此处mark

写shell脚本,第一句话一般是#!/bin/bash,这句话是用来说明下面的脚本是在什么shell下运行的

接下来就是写自己需要的功能,如果是全局都要用到的变量,则定义为全局变量,否则,在函数内部定义local变量即可。

下面为遍历文件夹下的所有文件,有两种方式,

1、

<span style="font-family:FangSong_GB2312;font-size:12px;">function scandir() {   
local cur_dir parent_dir workdir dataTime file_name
workdir=$1
dataTime=$2
cd ${workdir}

if [ ${workdir} = "/" ]
then
cur_dir=""
else
cur_dir=$(pwd)
fi

for dirlist in $(ls ${cur_dir})
do
if test -d ${dirlist}
then
cd ${dirlist}
scandir ${cur_dir}/${dirlist}
cd ..
else
f2 ${dirlist} ${dataTime}
fi
done
} </span>
下面为调用其的main函数,也就是执行该脚本是首先要执行的代码

<span style="font-family:FangSong_GB2312;font-size:12px;">if test -d $1   
then
scandir $1
elif test -f $1
then
echo "you input a file but not a directory,pls reinput and try again"
exit 1
else
echo "the Directory isn't exist which you input,pls input a new one!!"
exit 1
fi </span>
2、
<span style="font-family:FangSong_GB2312;font-size:12px;">function ergodic(){  for file in `ls $1`  do    if [ -d $1"/"$file ]    then      ergodic $1"/"$file    else      local path=$1"/"$file       local name=$file         echo $path $name    fi    done}</span>
下面为其main函数

<span style="font-family:FangSong_GB2312;font-size:12px;">if test -d $1   
then
ergodic $1
elif test -f $1
then
echo "you input a file but not a directory,please reinput and try again"
exit 1
else
echo "the Directory isn't exist which you input,please input a new one!!"
exit 1
fi </span>
以上两种方法中,都是接收了一个参数,这个参数就是要遍历的目录,在脚本中,用$1表示传进来的第一个参数,依次类推,而$0表示的则是shell本身的文件名

需要注意,每个if语句都是闭合,像html中的标签一样,都是成对出现的,且if判断完之后要用then

拼接字符串的时候,不用+,直接在后面跟着就行,当要拼接复杂的字符串时,使用printf拼接,如下:

STR_TEMP=`printf "%s%s" "$STR_ZERO" "$USER_NAME"`
使用printf可以进行更复杂的拼接

关于shell命令具体对字符串的处理,参考http://blog.csdn.net/linfeng999/article/details/6661233

在脚本中使用到shell命令是,一般是要加符号`,成对出现,将命令括起来(之前一直以为shell脚本中不能用现成品的脚本命令,需要都从底层写起呢,也是觉得自己傻的够够的了)

其实只要了解和熟悉shell脚本中的各功能所对应的都有什么命令,写脚本就是一个思路的问题

最后自己写的过程中遇到的问题:

写的函数太多,习惯了写java程序,老是觉得应该将代码按功能分块,这样可以方便复用,但是注意脚本一般来说都是直接使用的,别人不会调用你脚本中的某个函数,所以最好不要写太多函数,如果总体的代码量不大,那么按代码功能分块也没有太大必要。