Shell設計入門臥龍小三ols3@©2002byOLS3v1.0.008/01/2002v1.0.108/05/2002v1.0.208/08/2002v1.0.308/12/2002v1.0.408/15/2002v1.0.508/19/2002TableofContents1.前言2.佈置練習環境Linux/FreeBSD等Un*x平台Cygwin環境3.Bashshell的結構簡單的示範程式打開執行權執行script的方法shell使工作自動化容易您一定可以學會它本節習題4.基本的命令bashshell的內建命令echocdpwdalias命令列程式datewholscatwclnbasenamedirnamesortuniqcutpastetrgrep練習用的資料檔常用的特殊字元一個命令列執行好幾個命令命令列郵寄帶檔的方法本節習題5.設定變數設定變數的方法取得變數的內容取消變數的內容變數的有效範圍使變數成為環境變數取消環境變數由標準輸入讀取資料陣列(array)HereDocument進階變數設定亂數產生eval:使shell掃瞄命令二次本節習題6.萬用字元7.標準輸入/輸出/錯誤及I/O轉向與管線本節習題8.正規表示式何謂正規表示式(RegularExpressions)一點.^$[...]*\{...\}\(...\)sedsed的作用格式sed的作用法1sed的作用法2sed的作用法3sed的作用法4sed的作用法5sed的作用法6sed的作用法7awkawk的作用格式awk的作用法1awk的作用法2awk的作用法3awk的作用法4awk的作用法5本節習題9.引號10.算術運算11.參數傳遞12.程式條件控制if語法結構13.真假值判斷14.case語法結構本節習題15.迴圈語法結構for的迴圈while的迴圈until的迴圈無窮迴圈本節習題16.函式函式的寫法引入函式檔傳遞參數函式也可以遞迴呼叫17.select選單語法select的寫法本節習題18.歷史記錄取用歷史記錄的方法取用歷史記錄的最後一筆取用最後一筆歷史記錄中的參數部份實例參考資源#版權宣告:1999CopyrightOLS3Allrightsreserved.#作者:OLS3(臥龍小三)#本講義僅供台南縣87學年度網路管理進階研習班上課之用.#學員可保存一份自用,供日後網管時參考備查.#作者保有一切形式的著作權.#欲作其它用途者,需經作者授權同意.#未經作者授權同意之前,請勿轉載刊登.Bash的環境設定和Bash的環境設定有關的檔案有/etc/profile(主要)$HOME/.bash_profile(主要)$HOME/.bash_login$HOME/.profile$HOME/.bash_logout(主要)$HOME/.bashrc(主要)/etc/bashrc說明如下:登入(login)時1.先執行/etc/profile2.接著bash會檢查使用者的自家目錄中,是否有.bash_profile或者.bash_login或者.profile,若有,則會執行其中一個,執行順序為:a..bash_profile最優先b..bash_login其次c..profile最後這三個檔案只有在登入時,才會被bash讀取登出(exit/logout)時bash會檢查使用者自家目錄中是否有.bash_logout,若有,則bash會執行其中的指令登入後啟動一個新的shell:此時我們稱之為一個subshell,也就是說在命令列中鍵入bash,除了原先登入時的bash之外,又另外啟動了一個新的bashshell.bash會檢查使用者的自家目錄中是否有.bashrc,若有則予以執行實驗:在各檔中加入echo指令,以觀察其執行順序.各檔案用途說明/etc/profile由root所控管,用來設定適合全體使用者的shell環境若使用者自己覺得/etc/profile的設定,並不合意,可以修改自家目錄中的.bash_profile既然有了.bash_profile,為何要有.bash_login及.profile?這是因為有些人可能是從Bourneshell移轉過來的,那麼,只要將Bourneshell主要的起動檔.profile移到自家目錄中,放棄使用.bash_profile及.bash_login即可繼續沿用以前的設定環境.bash_login存在理由或許和cshell有關,但因為bash和cshell二者語法並不完全相容,因此,並不建議將cshell的啟動檔直接移過來使用..bashrc則是用來設定subshell的環境的,之所以要有這個.bashrc是為免subshell產生時,又重覆將/etc/profile執行一次.我們發現.bashrc中已預先會去執行/etc/bashrc的指令,這表示,或許root會將產生subshell時的環境設好了,使用者只要沿用/etc/bashrc的內容,應該不會有任何問題..bash_logout是使用者登出主機之前,會去執行的設定檔,如果使用者希望在他登出系統之後,能幫他自動處理一些瑣事,比如:清除暫存檔,清除螢幕等,可以在這個檔案中加以設定.#版權宣告:1999CopyrightOLS3Allrightsreserved.#作者:OLS3(臥龍小三)#本講義僅供台南縣87學年度網路管理進階研習班上課之用.#學員可保存一份自用,供日後網管時參考備查.#作者保有一切形式的著作權.#欲作其它用途者,需經作者授權同意.#未經作者授權同意之前,請勿轉載刊登.Shell當我們登入Linux之後,第一個接觸到的,便是Shell.我們必須對它有點初步的認識才行.一.Shell簡介.Linux系統分成三個重要的部份核心Shell工具程式核心的部份相當低階,操作者不易和它直接溝通,因此,必須要有一個友善的介面(interface),使得操作時能更為方便,這個介面便是Shell.換言之,Shell就是一個居於核心和操作者之間的一層使用者介面.那麼,為何稱它為Shell呢?Shell的本意是殼的意思呢!沒錯,在核心的外面,包覆著一層外殼,用來負責接收使用者輸入的指令,然後將指令解譯成核心能夠了解的方式,傳給核心去執行,再將結果傳回至預設的輸出周邊.如圖所示:例如:鍵入ls-lshell給你以下回應:擁檔有案檔種案檔案大小最近修改的類檔案權限數擁有人組別(byte單位)日期及時間檔案名稱drwxr-xr-x14rootroot1024Jul2121:31.drwxr-xr-x17rootroot1024Apr1112:01..drwxr-xr-x882821024Feb2519:23apache-rw-r--r--1rootroot1335460Feb2517:45apache_1_3_4.tar.gzdrwxr-xr-x6rootroot1024Aug311998ftpdrwxr-xr-x5rootroot1024Aug311998httpddrwx------2jamesjames1024Apr2306:47jamesdrwxr-xr-x2rootroot12288Aug311998lost+founddrwxr-xr-x2msqlnobody1024Dec281998msqldrwxr-xr-x28ols3ols32048Jul1921:38ols3drwxr-xr-x31022nobody1024Jan2523:40ols3cgidrwxrwxr-x3perlols31024Feb207:11perl-rw-------1rootroot2097152Jul2118:39quota.group-rw-------1rootroot1278656Jul2118:39quota.userdrwxrwxr-x2rootnobody1024May111998sambadrwxr-xr-x3apachenobody1024Feb2516:58tempdrwxrwxr-x2webadmnobody1024Mar1416:34webadm其實不只是Linux有這一層Shell,其它作業系統也有.比如DOS的command.com,Windows的GUI(GraphicalUserInterface),Mac的GUI.Shell按著表現的方式與讀取使用者輸入種類的不同,可分為二大類:Textbase:文字導向Graphbase:圖型導向所謂讀取使用者輸入種類不同是指:讀取自鍵盤,或讀取自滑鼠,其它serialinput,螢幕觸控等.這樣說來,Shell好像只是命令直譯器罷了?!嗯,這倒要按不同的OS所附給的Shell其功能和選擇性的自由度而定.以DOS的COMMAND.COM而言,它就是一個十足的命令直譯器,除了一點點batch檔的能力之外,它的功能並不多.Win平台的GUI,則是一個圖型式的命令直譯器,介面十分友善.不過,這二種OS,不能讓你自由而簡單地選擇Shell.(以前DOS有4dos可選用)Linux的shell,除了做為命令直譯器之外,它也是一個不錯的程式語言,是系統管理維護時的重要工具.由於Unix家族,對Shell的處理,採獨立自由開放的方式,因此,Shell的種類相當地多,更可以讓人自由地更換(chsh).目前流行的shell有:Bourneshell:shCshell:cshKornshell:ksh(商業軟體)tcsh(free)BourneAgainshell:bash(GNU)Linux的標準shell是採用bash.它也是我們要學習的主要對象.二.Shell的簡史第一個重要的shell是Bourneshell(如此命名是為了紀念此shell的發明者StevenBourne),1979年第一個流行的Unix版本7發行時,開始使用Bourneshell.Bourneshell的主檔名為sh,因此,日後人們便以sh為Bourneshell的主要識別名稱.雖然Unix上的shell有許多種,但Bourneshell的地位至今仍然沒有改變.許多Unix系統中仍然使用sh做為重要的管理工具.(它的工作從開機到關機,幾乎無所不包)第一個廣為流行使用的shell變種是Cshell.Cshell主要附在BSD版的Unix系統中.它的作者是柏克萊大學的BillJoy.Cshell主要是因為其語法和C語言相類似,因而得名.這使得Unix系統的程式師,在學習Cshell時,感到相當地方便容易.以上這二種形成shell的二大主流,後來的變種shell大都攫取這二種shell的優點.比如Korn,tcsh及bash.Bashshell是GNU計劃的重要工具軟體之一,也是GNU作業系統中標準的shell.Bash相容於sh,因此,許多早期開發出來的Bourneshell都可以繼續在bash中運作.現在我們安裝好的RedHatLinux便是完全使用Bash.(/bin/sh-/bin/bash)Bash在1988年誕生,最初的作者是BrianFox,ChetRamey於1989加入,現在官方正式的維護者是ChetRamey,他的工作便是持續不斷地增強bash的功能.1995~1996期間推出bash2.0,在這之前,廣為使用的版本是1.14.x,它增加了許多新的功能,以及更好的相容性.當然,Bash是完全免費的,它是OpenSource的一員,原始碼全部開放.二.Bash的功能.Bash具有以下功能:相容於Bourneshell(sh)包含有Cshell以及Kornshell中最好的功能.具命令列編修的能力(您記得以前DOS中的doskey嗎?)工作控制(jobcontrol)的能力,可控制前景及背景程式具shell程式設計的能力,可讓您自訂shell及設計程式,管理系統.三.新版的Bash哪裡抓取?若欲抓取新版的ba