前天接到一个小任务,写一个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命令是,一般是要加符号`,成对出现,将命令括起来(之前一直以为shell脚本中不能用现成品的脚本命令,需要都从底层写起呢,也是觉得自己傻的够够的了)

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

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

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