SHELL編程入門

來源:互聯網
上載者:User

SHELL編程入門 ØShell基礎Ø流程式控制制文法Ø常用命令介紹Ø範例展示Ø技巧總結 }解決介面無法處理的問題}}命令列介面比較快}做好管理 }bsh (Bourne Shell)}ksh (Korn Shell)}csh ( C Shell)}最常用的Shell是sh,大部分的Unix系統都將sh串連到bsh;IBM將sh串連到ksh }Shell程式也就是一系列的Unix命令的組合,相當於DOS系統下的批處理命令。Unix命令既可以是內部命令,也可以是已經編譯好的進階語言程式,甚至可以是其它Shell程式}Shell程式支援分支與迴圈結構,可以進行訊號處理}Shell程式可以加註釋,注釋以“#”號開頭,到行尾結束 }怎樣才能知道用什麼Shell來執行我編寫的Shell指令碼?參照下面三個原則:◦如果指令檔的第一個字元不是“#”號,則啟動bsh執行此指令碼◦如果指令檔的第一個字元是“#”號,但第二個字元不是“!”,則啟動csh執行此指令碼◦如果指令檔的前兩個字元為“#!”,則後面必須是Shell的全路徑,啟動指定的Shell執行此指令碼,如:  #!/usr/bin/ksh }Shell中if語句的文法如下:}if 命令1      #如果命令1執行成功(返回0)}then  #則執行list1命令列表}    list1  #如果執行不成功(返回非0值)}elif 命令2  #執行命令2}then  #如果命令2執行成功}    list2  #則執行list2命令列表}else  #如果命令2執行不成功}    list3  #則執行list3命令列表}fi}if語句以fi結尾 }Shell中case語句的文法如下:}case word in    #如果word與 pattern1匹配,}      pattern1)  #則執行list1命令列表}          list1    #如果word與 pattern2匹配,}          ;;  #則執行list2命令列表}      pattern2)  #…………}          list2}          ;;}   …………}esac }case語句以esac結尾,每個分支後兩個“;”是必須的}case語句中的pattern可以使用如下結構}“或”結構,如“a|b|c”匹配a或b或c}[範圍],如“[0-9]”匹配單個數字}“?”匹配任何單個字元}“*”匹配任何零個或多個字元}使用“*”,相當於C語言default分支}以上結構可以組合使用,如:}“[0-9]|0x[0-9A-Fa-f]” }Shell中while迴圈的文法如下:}while command}do}    list}done  #迴圈語句必須以done結尾}1、執行命令command}2、如果執行成功(傳回值為0),}      則執行list命令列表}3、重複1,直至command命令失敗(返回非零值) }Shell中until迴圈的文法如下:}until command}do}   list}done  #迴圈語句必須以done結尾}1、執行命令command}2、如果執行失敗(傳回值非0),}      則執行list命令列表}3、重複1,直至command命令執行成功(返回0)  }Shell中for迴圈的文法如下:}for name in word1 word2 ... wordN}do}   list}done  #迴圈語句必須以done結尾}name為變數名,word1到wordN是由空格分開的單字清單}for迴圈每次執行時,變數name被設為列表中的下一單詞}for迴圈常用於處理檔案集合  }例如:修改一個目錄下所有檔案的檔案名稱,在檔案名稱後加上“.bak”}for file in $HOME/*}do}    mv $file ${file}.bak}done }Shell中的特殊字元}* ? [ ] ' " \ $ ; & ( ) | ^ < > 換行  空格  tab}單引號“'”:單引號內的所有特殊字元都失去其特殊含義,包括分行符號}“'”必須成對出現。一對“'”之間不能嵌入“'”,前面用“\”轉義也不可以}反引號“`”:反引號內是一組命令。Shell將反引號替換為該命令的輸出。反引號對特殊字元的處理與雙引號基本相同  }雙引號“"”:雙引號內的大部分字元失去特殊含義,下面的字元除外:◦$      $用於變數替換◦`     反引號用於命令替換◦\$    $作為美元符,而不具備特殊含義◦\`     `作為反引號,而不具備特殊含義◦\"     使用嵌入的雙引號◦\\       使用嵌入的反斜線◦其它的\字元都作為一般字元 }定義變數name=value    中間不能有空白 變數名只能包含字母、數字或者底線,並且只能以字母或底線開頭 }引用變數時,在變數名前加 $符}特殊的變數◦$$ 當前執行Shell的進程ID◦$1 … $9 命令列參數◦$@或$*  命令列參數◦環境變數:子進程可以繼承父進程的環境變數,在sh下,用export命令將一個變數設為環境變數}在ksh中,${#name} 為變數name值的長度 }command > filename 把把標準輸出重新導向到一個新檔案中}command >> filename 把把標準輸出重新導向到一個檔案中(追加)}command 1 > fielname 把把標準輸出重新導向到一個檔案中}command > filename 2>&1 把把標準輸出和標準錯誤一起重新導向到一個檔案中}command 2 > filename 把把標準錯誤重新導向到一個檔案中}command 2 >> filename 把把標準輸出重新導向到一個檔案中(追加)}command >> filename 2>&1 把把標準輸出和標準錯誤一起重新導向到一個檔案中(追加)}command < filename >filename2 把command命令以filename檔案作為標準輸入,以filename2檔案作為標準輸出}command < filename 把c o m m a n d命令以f i l e n a m e檔案作為標準輸入}command << delimiter 把從標準輸入中讀入,直至遇到d e l i m i t e r分界符}command <&m 把把檔案描述符m作為標準輸入}command >&m 把把標準輸出重新導向到檔案描述符m中}command <&- 把關閉標準輸入} 1、在命令列中指定偵錯模式執行 }指定SHELL –x 程式名稱,如:}sh –x update_iuser214.sh}2、 執行SHELL }前台執行:}   >sh 程式名稱}            >程式名稱}後台執行:}           >sh 程式名稱  &}           >程式名稱     &} }尋找和編輯文本,主要用於按指定模式尋找,替換,插入,刪除檔案內容}直接鍵入命令}Sed [-option] command_line filename}將sed命令插入指令檔,然後調用sed}Sed [-option] –f program_file filename}選項:}e 使用命令列作為sed的編輯命令}n 不列印 命令   意思 P         列印匹配行 =          顯示文本行號 a\         在定位行號後附加新文本資訊 i\          在定位行號前插入新文本資訊 d          刪除定位行 c\         用新文本替換定位文本 s          使用替換模式 r           從一個檔案中讀文本 w          將文本寫到一個檔案 Sed列印檔案的第二行             sed –n ‘2p’ filename Sed列印匹配test的行             sed –n ‘/test/p’ filename Sed替換文本            sed ‘s/night/NIGHT’  filename            sed ‘s/night/NIGHT/g’ filename   刪除僅包含空行的行            sed ‘/^[]*$d’ filename Awk是一種程式語言,對於文檔裡的資料做修改、比較、抽取等處理 格式:       awk [-F char] ‘command_line’ filename -F char 確定間隔符 刪除偶數行        awk ‘{if(NR%2==1) print $0}’ filename 擷取輸入行中域最大的數       awk ‘{if(NF>max) max=NF} END {print max}’ filename 輸出超過80個字元的行        awk ‘{length($0)>80 }’ filename 良好的注釋能夠增加代碼可讀性 指令碼執行與定義分離,增強代碼可擴充性 }理解需求,需要對外提供什麼樣的介面}將需求分解成小步驟}增加必要的注釋}區分變數的使用,全域變數與局部變數的使用}寫虛擬碼,提取出共性部分使用函數實現}逐步實現小需求,逐步調試}盡量使用變數,提供可擴充性,保證指令碼後續的維護}減少頻繁對外的互動

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.