標籤:
▲shell指令碼
shell script是利用shell的功能所寫的一個程式,這個程式是使用純文字檔案,將一些shell文法與指令寫在裡面,搭配Regex,管道命令與資料流重導向等功能,以達到我們所想要的處理目的。
shell script可以用來追蹤與管理系統的重要工作,簡單入侵偵測功能,建議的資料處理
?
在shell script中需要注意的事項
- 指令與參數間的多個空白會被忽略掉
- 空白行和tab也將被忽略掉
- 如果讀到一個Enter符號(CR),就嘗試開始執行該命令
- 如果一行的內容太多,可以使用\[Enter]來延伸至下一行
- 任何加在#後面的字,將全部視為批註文字而被忽略
?
如何執行.sh指令檔
- 將shell.sh加上可讀與執行許可權,以./shell.sh來執行
- 直接以sh shell.sh的方式來直接執行。sh是bash的軟串連。
?
sh [-nvx] scripts.sh
????參數-n????????不要執行script,僅查詢文法的問題
????參數-v????????在執行script前,先將script的內容輸出到螢幕上
????參數-x????????將使用到的script內容顯示到螢幕上
?
編寫指令碼時需要添加的代碼:
????功能,版本資訊,作者與聯絡方式,著作權聲明方式,記錄,較特殊的命令使用絕對路徑的方式來下達,聲明與設定指令碼運行時需要的環境變數
?
例如編寫一個列印hello world的指令碼,代碼如下:
#!/bin/bash #Program: # this scripts is used to print hello world #History: 2015-1-26 youname first release PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin:~/bin export PATH ? echo "hello world" exit 0 |
?
▲test判斷
關於某個檔案名稱的判斷(存在與否)
????test –[bcedfpSL] filename
關於檔案的許可權偵測
????test –[rwxugks] filename
兩個檔案之間的比較
????test file1 –[nt,ot,ef] file2
????????-nt????newer than
????????-ot????older than
????????-ef????file1與file2是否為同一檔案,可用在hard link的判定上
兩個整數之間的判定
????test n1 –[eq,ne,gt,lt,ge,le] n2
????????-eq????equal
????????-ne????not equal
????????-gt????greater than
????????-lt????less than
????????-ge????greater than or equal
????????-le????less than or equal
判定字串的資料
????test –z string????????若string為空白(null),則為true
????test –n string????????若string非空,則為true
????test str1 = str2????????若相等,回傳true
????test str1 != str2????若不等,回傳true
多重條件判定
????參數-a(and,兩狀況同時成立)
????參數-o(or,任何一個成立)
????參數!(反相狀態)
?
判斷符號[]
????將判斷特徵和被判斷對象放入中括弧中,不需要test了
?
▲if判斷語句
????if [條件判斷式]; then????????fi結束
????if [條件判斷式]; then else????fi結束
????if [條件判斷式1];then elif[條件判斷式2];then else????fi結束
?
▲case…esac判斷
?
▲function功能
格式如下:
????function fname()
????{
????程式段
}
?
function的設定一定要在程式的最前面
擁有內建變數,$0表示函數名稱,後續接的變數標記為$1,$2…
?
▲迴圈控制
while迴圈:????當condition成立時,開始迴圈
while [condition]
do
????程式段落
done
?
until迴圈:????當condition成立時,終止迴圈
until [condition]
do
????程式段落
done
?
▲for迴圈
格式1:
for ((初始值;限制值;步長))
do
????程式段
done
?
格式2:
for var in con1 con2 con3…
do
????程式段
done
Linux中shell scripts