通俗點(diǎn)講,shell就是跟unix系統(tǒng)核心服務(wù)之間的調(diào)用接口,它是解釋執(zhí)行的,不需要編譯,這點(diǎn)很爽。
shell的功能很強(qiáng)大,基本unix有的服務(wù),都可以通過(guò)shell去調(diào)用,對(duì)于系統(tǒng)管理員是必備的技能,可以節(jié)約不少時(shí)間,提高效率。
shell里,awk,sed,grep這3種類(lèi)型功能最強(qiáng)大。
awk提供字符串處理功能,方便進(jìn)行分析統(tǒng)計(jì);
sed是流文本編輯命令工具,功能大于vi;
grep能根據(jù)正則表達(dá)式進(jìn)行查找,支持管道過(guò)濾。
這里根據(jù)工作用到的一個(gè)每天定時(shí)清除n天之前的mysql數(shù)據(jù)庫(kù)文件為例。
主要是依據(jù)每天生成的表的日期字符串跟7天前字符串的值進(jìn)行比較。[這里是大小比較]
 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,表示這個(gè)腳本以bash shell來(lái)解釋執(zhí)行;
2,date命令,設(shè)置變量datestr為7天前的年月日格式的值;
3,4,  查找數(shù)據(jù)庫(kù)文件目錄下的.frm,.MYD,.MYI文件,并且文件名含有"_200"字符串,將這些文件的路徑重定向到 tmp文件;
5,將tmp的數(shù)據(jù)讀到變量fileList;
6,7,14,循環(huán)結(jié)構(gòu),每次讀一行數(shù)據(jù);
8,設(shè)置變量MovedDir2的值為一行數(shù)據(jù)的最后一個(gè)"/"分隔號(hào)值的最后一個(gè)"_"分隔號(hào)的前8位字符.
[假設(shè)一行數(shù)據(jù)為"/usr/local/mysql-standard-4.1.7-pc-linux-i686/data/movie_end/end_20071206.MYI",那么變量MovedDir2的值為 20071206]
9,10,13,判斷 變量MovedDir2的值 是否小于datestr的值,條件判斷結(jié)構(gòu);
11,回顯 變量fileName的值;
12,刪除變量fileName定位的文件;

demo總結(jié):
1,循環(huán),判斷結(jié)構(gòu)的使用;
2,date,find,awk,rm命令的利用;
3,重定向符 ">"的使用,管道"|"的使用。