通俗點講,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,重定向符 ">"的使用,管道"|"的使用。