1. 程式人生 > >Shell指令碼書寫方法詳解

Shell指令碼書寫方法詳解

同學給我推薦了一個關於如何書寫shell指令碼教程檔案。看過之後覺得受益良多,自己特意將該PDF內的內容自己總結了一份,在這裡和大家分享一下。願所有像我一樣的shell指令碼的初學者能夠從中受益,少走彎路。首先,shell的作用使用者的登陸shell  登陸後預設的shell程式是: /bin/bash不同的shell內部指令,執行環境會有所區別常見的shell有/bin/sh/bin/bash/sbin/nologin1.編寫指令碼程式碼:使用vi編輯器,每行一條Linux命令,按照順序執行2.然後賦予指令碼檔案可執行的屬性3.執行指令碼檔案的三種方法./chao.shsh /chao.shsource /chao.sh更完善的指令碼構成指令碼宣告註釋資訊可執行語句重定向操作    型別                        操作符                      用途重定向輸入                     <                        從指定檔案讀取而不是從鍵盤輸入重定向輸出                     >                         將輸出檔案儲存到指定檔案(覆蓋原有內容)                                      >>                      將輸出檔案儲存到指定檔案(覆蓋原有內容)標準錯誤輸出                  2>                      將錯誤資訊儲存到指定的檔案(覆蓋原有內容)                                      2>>                    將錯誤資訊儲存到指定的檔案混合輸出                        &>                       將標準輸出,標準錯誤的內容儲存到同一檔案中管道操作符號“|”將左側的命令輸出結果,作為右側命令的處理物件
shell變數的作用為靈活管理Linux系統提供的特定引數,有兩層意思變數名:使用固定的名稱,由系統預設或使用者定義變數值: 能夠根據使用者設定,系統環境的變化而變化變數的型別自定義變數:由使用者自己定義,修改和使用環境變數: 由系統維護,用於設定工作環境位置變數: 通過命令列給指令碼程式傳遞引數預定義變數:BASH中內建的一類變數,不能直接修改定義一個新的變數格式: 變數名=變數值變數名以字母或下劃線開頭,區分大小寫,建議全大寫檢視變數的值:   echo $變數名賦值時使用引號:雙引號:允許使用$符引用其他變數值單引號: 禁止引用其他變數值,$視為普通字元反撇號:命令替換,提取命令執行後的輸出結果將鍵盤輸入內容為變數賦值格式:   read [-p "提示資訊"] 變數名設定變數的作用範圍export 變數名export 變數名=變數值兩種格式可以混合使用整數變數的運算:expr  變數1 運算子  變數2 [運算子 變數3]常見的運算子加法運算子 +減法運算子: -乘法運算子:\*除法運算子: /取餘運算:%整數變數的運算(2)((變數=變數運算子變數));等號後面的變數可以是具體數值例子:((a=a+3));環境變數:由系統提前建立,用來設定使用者的工作環境配置檔案: /etc/profile       ~/.bash_profile常見環境變數的舉例
位置變數:表示為$n, n為1~9之間的數字
預定義變數: /etc/passwd  /etc/shadow例如一些服務的內建使用者名稱或密碼如apache的啟動使用者就是預定義變數條件測試操作測試特定的 表示式是否成立,當條件成立時,測試語句的返回值為0,否則為其他數值格式 : test 條件表示式應用例項:                                    
test -z 進行測試的時候   字串長度為0的時候   結果才返回1            如果變數數值為0    返回0條件測試操作[ 操作符 檔案或目錄][5]  部分是判斷表示式,-d表示判斷是否是目錄&&是”邏輯與“操作符,只有&&前面的判斷成立,後面的語句才會執行-b的意思是判斷 後面的路徑是否是一個目錄echo $?    表示對剛剛執行的表示式進行判斷0表示成立,1表示不成立-e filename     如果 filename存在,則為真     [ -e /var/log/syslog ]-d filename     如果 filename為目錄,則為真     [ -d /tmp/mydir ]-f filename     如果 filename為常規檔案,則為真     [ -f /usr/bin/grep ]-L filename     如果 filename為符號連結,則為真     [ -L /usr/bin/grep ]-r filename     如果 filename可讀,則為真     [ -r /var/log/syslog ]-w filename     如果 filename可寫,則為真     [ -w /var/mytmp.txt ]-x filename     如果 filename可執行,則為真     [ -L /usr/bin/grep ]filename1-nt filename2     如果 filename1比 filename2新,則為真     [ /tmp/install/etc/services -nt /etc/services ]filename1-ot filename2     如果 filename1比 filename2舊,則為真     [ /boot/bzImage -ot arch/i386/boot/bzImage ]字串比較運算子 (請注意引號的使用,這是防止空格擾亂程式碼的好方法)-z string     如果 string長度為零,則為真     [ -z "$myvar" ]-n string     如果 string長度非零,則為真     [ -n "$myvar" ]string1= string2     如果 string1與 string2相同,則為真     [ "$myvar" = "one two three" ]string1!= string2     如果 string1與 string2不同,則為真     [ "$myvar" != "one two three" ]算術比較運算子num1-eq num2     等於    [ 3 -eq $mynum ]num1-ne num2     不等於    [ 3 -ne $mynum ]num1-lt num2     小於    [ 3 -lt $mynum ]num1-le num2     小於或等於    [ 3 -le $mynum ]num1-gt num2     大於    [ 3 -gt $mynum ]num1-ge num2     大於或等於    [ 3 -ge $mynum ]整數值比較格式: [ 整數1 操作符 整數2 ]
字串比較格式1: [ 字串1 = 字串2 ]             [ 字串1 != 字串2 ]格式2: [  -z 字串 ]
邏輯測試:格式1:  [ 表示式1 ]   操作符    [ 表示式2 ]格式2: 命令1  操作符   命令2if語句的結構
while語句的語法結構