通俗点讲,shell就是跟unix系统核心服务之间的调用接口,它是解释执行的,不需要编译,这点很爽。
shell的功能很强大,基本unix有的服务,都可以通过shell去调用,对于系统管理员是必备的技能,可以节约不少时间,提高效率。
shell里,awk,sed,grep这3种类型功能最强大。
awk提供字符串处理功能,方便进行分析统计;
sed是流文本编辑命令工具,功能大于vi;
grep能根据正则表达式进行查找,支持管道过滤。
这里根据工作用到的一个每天定时清除n天之前的mysql数据库文件为例。
主要是依据每天生成的表的日期字符串跟7天前字符串的值进行比较。[这里是大小比较]
 1#!/bin/bash
 2datestr=`date --date="7 day ago" +%Y%m%d`
 3find /usr/local/mysql-standard-4.1.7-pc-linux-i686/data/movie_pvfrom/ -name '*.frm' --name '*_200*' --name '*.MYD' --name '*_2
 400*' -o -name '*.MYI'  -a -name '*_200*' > tmp
 5fileList=`more < tmp`
 6for fileName in $fileList
 7do
 8MovedDir2=`echo $fileName|awk -F/ '{print $NF}'|awk -F_ '{print substr($NF, 0, 8)}'`
 9if [ $MovedDir2 -lt $datestr ]
10then
11echo $fileName
12rm $fileName
13fi
14done

一行一行解释一下:
1,表示这个脚本以bash shell来解释执行;
2,date命令,设置变量datestr为7天前的年月日格式的值;
3,4,  查找数据库文件目录下的.frm,.MYD,.MYI文件,并且文件名含有"_200"字符串,将这些文件的路径重定向到 tmp文件;
5,将tmp的数据读到变量fileList;
6,7,14,循环结构,每次读一行数据;
8,设置变量MovedDir2的值为一行数据的最后一个"/"分隔号值的最后一个"_"分隔号的前8位字符.
[假设一行数据为"/usr/local/mysql-standard-4.1.7-pc-linux-i686/data/movie_end/end_20071206.MYI",那么变量MovedDir2的值为 20071206]
9,10,13,判断 变量MovedDir2的值 是否小于datestr的值,条件判断结构;
11,回显 变量fileName的值;
12,删除变量fileName定位的文件;

demo总结:
1,循环,判断结构的使用;
2,date,find,awk,rm命令的利用;
3,重定向符 ">"的使用,管道"|"的使用。