本文裡,通過對shell指令碼裡的變數申明、迴圈語句、條件判斷、資料疊加的總結,能解決linux日常管理的大部分指令碼
1、變數的申明:
是弱類型的語言,用name=xxx;取變數值的時候$name
2、條件判斷:
if[ condition]; then
operator;
elif[ condition]; then
operator;
else
operator;
fi
3、迴圈:
while[ condition]
#condition如果是用[]取代test,則有兩個[]
do
operator;
done;
for((i=1;i<100;i++))
do
operator;
done;
for var in $(seq n)
#or for var in `cat /etc/hosts`
do
operator;
done;
4、使用"[]"做判斷條件注意點:
1)、每個組件之間都要用空格隔開,如果用@代替空格,則運算式的判斷為@[@str1@==@str2@]@;
2)、用'=='進行判斷時,兩邊的必須是字串,所以必須用""括起來,如"$name" == "want",用$name == "want"出錯,兩邊類型不同;
3)、test判斷:
檔案偵測: test -e filename
test -f filename
test -d direct
檔案許可權判斷:
test -r filename
test -w filename
test -x filename
文檔時間:
test file1 -nt file2; 判斷file1是否比file2新
test file1 -ot file2;
test file1 -et file2;判斷兩個檔案是否為同一個檔案,可用在hard link的判斷上
兩整數的判斷:
test n1 -eq n2;
test n1 -ne n2;
test n1 -gt n2;
test n1 -lt n2;
test n1 -ge n2;
test n1 -le n2;
字串的判斷:
test -z string;字串是否為空白為0,如果string為空白,則為true;
test -n string;字串是否非0
test st1 = st2;
test st1 != st2;
多重判斷:
-a:and,例子test -r file -a -x file;
-o:
!:test ! -x file:判斷file檔案是否沒有可執行許可權
4)、[]判斷可以替代test進行判斷,除了2)中的字串相等要用==;
5)、let "count=$count + 1";必須有"",否則出錯
5、字元運算
i=2;
i=$(($i*2));
6、awk:
awk '條件類型1{動作1} 條件類型2{動作2}' filename
列印file中以分號分割的第三列大於10的第一列和第4列
cat file| awk 'BEGIN {FS=":"} $3 > 10 {print $1 "\t" $4}}
7、簡單的例子:
看完了這些,你是否可以寫出這樣的指令碼了呢:用遞迴的思想找出給定目錄下檔案大小超過給定大小檔案的指令碼,雖然可以用find命令操作,但是還是值得動手去做的!