shell脚本初学 遍历目录下的文件
2015-09-08 10:32
453 查看
前天接到一个小任务,写一个shell脚本,负责对文件根据日期归类统计,之前没有写过shell脚本,只知道sh文件可以直接在命令窗口执行,瞎折腾了半天,也算是完成了一半的任务(等我写好了,头儿早已经写好了),不过自己还是学习了一下,此处mark
写shell脚本,第一句话一般是#!/bin/bash,这句话是用来说明下面的脚本是在什么shell下运行的
接下来就是写自己需要的功能,如果是全局都要用到的变量,则定义为全局变量,否则,在函数内部定义local变量即可。
下面为遍历文件夹下的所有文件,有两种方式,
1、
需要注意,每个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程序,老是觉得应该将代码按功能分块,这样可以方便复用,但是注意脚本一般来说都是直接使用的,别人不会调用你脚本中的某个函数,所以最好不要写太多函数,如果总体的代码量不大,那么按代码功能分块也没有太大必要。
写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程序,老是觉得应该将代码按功能分块,这样可以方便复用,但是注意脚本一般来说都是直接使用的,别人不会调用你脚本中的某个函数,所以最好不要写太多函数,如果总体的代码量不大,那么按代码功能分块也没有太大必要。
相关文章推荐
- shell如何向python传递参数,shell如何接受python的返回值
- shell 获得本机IP和free端口
- shell脚本 for循环实现文件和目录遍历
- 通用shell
- Linux重新学习--shell script--函数
- ubuntu shell不兼容
- Genymotion的shell的命令
- linux bash环境变量简单总结
- 一个自动安装LNMP的简洁Shell脚本
- 使用dbms_scheduler调用shell脚本
- shell 文件遍历
- Vim编辑器,find命令及bash环境配置
- shell 批量替换文本中的字符串
- bash环境配置
- linux-bash环境变量
- vim&find&bash&
- Bash环境变量配置
- bash 环境变量
- find,vim,bash环境变量,文件权限
- linux--Xshell的使用