shell script
是利用shell的功能所寫的一個程式,這個程式是使用純文字檔案,將shell的語法和指令寫在裡面搭配正規表示式、管道命令和資料流重導向等功能,以達到我們所想要處理的目的。
注意事項:
- 指令的執行是從上而下、從左而右的分析與執行
- 指令、選項與引數間的空格都會被忽悠掉
- 空白行也將被忽略掉,並且[tab]按鍵所推開的空白同樣被忽悠
- 如果讀取到一個Enter字元,就嘗試開始執行命令
- [#]可做為批註!任何加在#後面的資料將全部視為批註文字被忽略
如何執行指令碼
-
直接指令下達:shell檔案必須要具有可讀和可執行的檔案
絕對路徑: 相對路徑:假設在工作目錄內,可以直接使用./shell.sh來執行 變數[PATH]功能:將shell.sh放在PATH的指定目錄內。如~/bin/
-
以bash程式來執行:透過[bash shell.sh]或[sh shell.sh]
-
用source來執行,在父程式中執行
說明script的1.內容與功能 2.版本資訊 3.作者與聯絡方式 4.建檔日期 5,歷史記錄等等
利用test命令測試功能
-e 檔名是否存在 -f該檔名是否存在且為檔案 -d該檔名是否為存在且為目錄 -r該檔名是否存在且可讀 -w該檔名是否存在且可寫 -x該檔名是否存在且可執行 -s該檔名是否存在且為非空白檔案 -ef判斷file1與file2是否為同一檔案 -z string 判斷字元是否為空字元,若是,則為真 !反向狀態
利用判斷符號[]
中括號[]的兩端需要有空白符來分隔;在中括號內的變數,最好都以雙引號括起來;在中括號的常量,最好以單或雙引號括起來
shell script的預設變數
$#:代表後面接的引數個數
$@:代表“$1"、"$2"、"$3"之意,每個變數都是獨立
$*:代表“$1c$2c$3c$4”,其中c為分隔符,預設為空格
shift:造成變數號碼偏移 ##條件判斷式 if...then
if[條件判斷式];then當條件判斷成立時,可以進行的命令工作內容
fi 結束
複製程式碼
一個條件的判斷
if[條件判斷式];then當條件判斷成立時,可以進行的命令工作內容
else當條件不成立時,可以進行的命令工作內容
fi 結束
複製程式碼
多個條件的判斷
if[條件判斷1];then當條件判斷1成立時,可以進行的命令工作
elif[條件判斷2];then當條件判斷2成立時,可以進行的命令工作
else當條件1與條件2都不成立時,可以進行的命令內容
fi 結束
複製程式碼
netstat -tuln取得目前主機有啟動的服務
幾個常見的port與相關網路服務的關係是
80:www
22:ssh
21:ftp
25:mail
111:RPC(遠端列印呼叫)
631:CUPS(列印服務功能)
##利用case...esac判斷
case \$變數名稱 in <==關鍵字為case,還有變數前有$
"第一個變數內容") <==每個變數內容建議用雙括號括起來,關鍵字則為小括號
程式段
;; <==每個型別結尾使用兩個連續的分號來處理
"第二個變數內容")
程式段
;;
*) <==最後一個變數內容都會\*代表所有其他值
不包含第一個變數與第二個變數內容的其它程式執行段
exit 1
;;
esac
複製程式碼
##利用function功能,函式功能
function fname () {
程式段
}
複製程式碼
##loop迴圈 不定迴圈
while do done
while [ condition ] <==判斷式
do <==do 是迴圈的開始
程式段落
done <==done 是迴圈的結束
複製程式碼
until do done
until [ condition ]
do
程式段落
done
複製程式碼
固定迴圈 for do done
for var in con1 con2 con3...
do
程式段
done
複製程式碼
第一次迴圈時,$var的內容為con1;
第二次迴圈時,$var的內容為con2;
第三次迴圈時,$var的內容為con3;
...
for...do...done的數值處理
for((初始值;限制值;執行步長))
do
程式段
done
複製程式碼
初始值:某個變數在迴圈當中的初始值,直接以類似i=1設定好
限制值:當變數的值在這個限制值的範圍內,就繼續進行迴圈,例如i<=100
執行步長:每做一次迴圈時的變化量。例如i=i+1
##shell script的追蹤與除錯
sh [-nvx] scripts.sh
引數:
-n:不要執行script,僅查詢語法的問題;
-v:在執行script前,先將script的內容輸出到螢幕上
-x:將使用到的script內容顯示到螢幕上
複製程式碼