歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
您现在的位置: Linux教程網 >> UnixLinux >  >> Linux綜合 >> Linux資訊 >> 更多Linux

bash入門基礎

  前言  本文譯自《Slackware Linux Unleashed》(第三版)一書的 bash 一章,但做了一些必要的刪節,並且有的地方根據實際情況作了較大的改動,必要的話請參考原文。    簡介  本文將較為詳細地介紹 Linux 下最常用的 shell,bash。bash(Bourne Again Shell) 是 Linux 的缺省 shell,並被大多數用戶所使用,在本文中你將學會:    什麼是shell    Linux上最常見的shell    命令補齊(Command-line completion)和通配    命令歷史記錄(Command history)和別名    重定向和管道    改變提示符    進程控制(Job control)    如何用戶化配置你的bash shell    另外你還將看到一些最常用的bash命令和內存變量的用法,讀完本文後你將能更快和更有效地使用bash。    Shells in a Nutshell    什麼是shell?總之這個詞好象總是出現在 Linux 裡,但很多新用戶並不清楚它的明確的含義。本節將給出一個確切的解釋並說明為什麼在Linux中它顯得如此的重要。    什麼是Shell?    shell是你(用戶)和Linux(或者更准確的說,是你和Linux內核)之間的接口程序。你在提示符下輸入的每個命令都由shell先解釋然後傳給Linux內核。    --------------------------------------------------------------------------------    注意: 如果你熟悉m$-dos,你將認出這很象DOS 用戶和 COMMAND.COM之間的關系。唯  一的區別是command.com 的功能遠不能和shell 相提並論。    --------------------------------------------------------------------------------  shell 是一個命令語言解釋器(command-language interpreter)。擁有自己內建的 shell 命令集。此外,shell也能被系統中其他有效的Linux 實用程序和應用程序(utilities and application programs)所調用。    不論何時你鍵入一個命令,它都被Linux shell所解釋。一些命令,比如打印當前工作目錄命令(pwd),是包含在Linux bash內部的(就象DOS的內部命令)。其他命令,比如拷貝命令(cp)和移動命令(rm),是存在於文件系統中某個目錄下的單獨的程序。而對用戶來說,你不知道(或者可能不關心)一個命令是建立在shell內部還是一個單獨的程序。    附圖展示了 shell 是如何執行命令解釋的,shell 首先檢查命令是否是內部命令,不是的話再檢查是否是一個應用程序,這裡的應用程序可以是Linux本身的實用程序,比如ls 和 rm,也可以是購買的商業程序,比如 xv,或者是公用軟件(public domain software),就象 Ghostview。然後shell試著在搜索路徑裡尋找這些應用程序。搜索路徑是一個能找到可執行程序的目錄列表。如果你鍵入的命令不是一個內部命令並且在路徑裡沒有找到這個可執行文件,將會顯示一條錯誤信息。而如果命令被成功的找到的話,shell的內部命令或應用程序將被分解為系統調用並傳給Linux內核。    shell的另一個重要特性是它自身就是一個解釋型的程序設計語言,shell 程序設計語言支持在高級語言裡所能見到的絕大多數程序控制結構,比如循環,函數,變量和數組。shell 編程語言很易學,並且一旦掌握後它將成為你的得力工具。任何在提示符下能鍵入的命令也能放到一個可執行的shell程序裡,這意味著用shell語言能簡單地重復執行某一任務。    shell 如何啟動  shell在你成功地登錄進入系統後啟動,並始終作為你與系統內核的交互手段直至你退出系統。你系統上的每位用戶都有一個缺省的shell。每個用戶的缺省shell在系統裡的passwd文件裡被指定,該文件的路徑是/etc/passwd。passwd文件裡還包含有其他東西:每個人的用戶ID號,一個口令加密後的拷貝和用戶登錄後立即執行的程序,(注:為了加強安全性,現在的系統一般都把加密的口令放在另一個文件--shadow中,而passwd中存放口令的部分以一個x字符代替)雖然沒有嚴格規定這個程序必須是某個Linux shell,但大多數情況下都如此。    最常用的shell  在Linux 和 UNIX系統裡可以使用多種不同的shell可以使用。最常用的幾種是 Bourne shell (sh), C shell (csh), 和 Korn shell (ksh)。三種shell 都有它們的優點和缺點。Bourne shell 的作者是 Steven Bourne。它是 UNIX 最初使用的shell 並且在每種 UNIX 上都可以使用。Bourne shell 在 shell 編程方面相當優秀,但在處理與用戶的交互方面作得不如其他幾種 shell。  C shell 由 Bill Joy 所寫,它更多的考慮了用戶界面的友好性。它支持象命令補齊(command-line completion)等一些 Bourne shell 所不支持的特性。普遍認為C shell 的編程接口做的不如 Bourne shell, 但 C shell 被很多 C 程序員使用因為 C shell的語法和 C語言的很相似,這也是C shell名稱的由來。    Korn shell (ksh) 由 Dave Korn 所寫。它集合了C shell 和 Bourne shell 的優點並且和 Bourne shell 完全兼容。    除了這些 shell 以外,許多其他的 shell 程序吸收了這些原來的 shell 程序的優點而成為新的 shell 。在 Linux 上常見的有 tcsh (csh 的擴展),Bourne Again shell(bash, sh 的擴展), 和Public Domain Korn shell (pdksh, ksh 的擴展)。bash 是大多數Linux 系統的缺省 shell。    The Bourne Again Shell    Bourne Again shell (bash), 正如它的名字所暗示的,是 Bourne shell 的擴展。bash 與 Bourne shell 完全向後兼容,並且在 Bourne shell 的基礎上增加和增強了很多特性。bash 也包含了很多 C 和 Korn shell 裡的優點。bash 有很靈活和強大的編程接口,同時又有很友好的用戶界面。    為什麼要用 bash 來代替 sh 呢?Bourne shell 最大的缺點在於它處理用戶的輸入方面。在 Bourne shell 裡鍵入命令會很麻煩,尤其當你鍵入很多相似的命令時。而 bash 准備了幾種特性使命令的輸入變得更容易。      命令補齊(Command-Line Completion)  通常你在 bash (或任何其他的 shell)下輸入命令時你不必把命令輸全 shell 就能判斷出你所要輸入的命令。例如,假定當前的工作目錄包含以下的文件和子目錄:    News/ bin/ games/ mail/ samplefile test/  如果你要進入 test 子目錄,你將會輸入以下的命令:  cd test  這個命令能夠滿足你的需要,但 bash還提供了稍微不同的方法來完成同樣的事。因為 test 是當前目錄裡唯一以字母 t開頭的子目錄,bash在你只輸入字母 t後就能判斷出你要做什麼了:  cd t  在你鍵入那個字母後,唯一的可能就是 test 。想讓 bash 幫你結束命令的話,按下 Tab 鍵:    cd t  當你這樣做以後,bash 將幫你補齊命令並顯示在屏幕上。但在你按下回車鍵以前命令並沒有被執行,bash 會讓你檢驗補齊的命令是否是你真正需要的。在輸入象這樣短的命令時你也許看不出它的價值所在,甚至在命令很短時還會簡慢輸入的速度,但是當你要輸入的命令有點長時,你會發現這個特性是多麼的美好。  但是當目錄裡有不止一個以字母 t 開頭的文件時會發生什麼情況呢?在你使用命令補齊時會有問題,讓我們看看下面的情況,當前目錄裡有下列內容:    News/ bin/  mail/ samplefile  test/ tools/ working/  現在這個目錄裡有兩個以字母 t 開頭的文件。假設你仍然想進入 test 子目錄,如何使用命令補齊呢?如果你象先前那樣鍵入:  cd t  bash 將不知道你到底想進入哪個子目錄,因為給出的信息並不唯一。如果你這樣做了的話,bash 將發出一聲蜂鳴提醒你沒有足夠的信息來補齊你的命令。蜂鳴之後bash 並不改變輸入的命令,這將使你能在原來的基礎上再輸入更多的信息,在這個例子中你僅需再鍵入一個 e 並再按一下 Tab 鍵,這時 bash 就有足夠的信息來完成你的命令了:  cd test  當你輸入命令時不論何時按下 Tab 鍵,bash 都將盡其所能地試圖補齊命令,不行的話會發出蜂鳴來提醒你需要更多的信息。你需要鍵入更多的字符,並再次按下 Tab 鍵,重復這個過程直至你期望的命令出現。    通配符  另一個使命令輸入變得更簡單的方法是在命令中使用通配符。bash 支持三種通配符:    *   匹配任何字符和任何數目的字符    ?   匹配任何單字符    [...] 匹配任何包含在括號裡的單字符    * 通配符的使用有些象命令補齊。例如,假設當前目錄包含以下文件:    News/ bin/  games/  mail/ samplefile  test/    如果你想進入 test 目錄,你將鍵入 cd test, 或者你想用命令補齊:    cd t    現在有第三種方法來做同樣的事。因為僅有一個文件以字母 t 開頭,你也能用 * 通配符來進入該目錄。鍵入下列命令:    cd t*    * 匹配任何字符和任何數目的字符,所以 shell 將把 t* 替換為 test(當前目錄裡唯一和通配方案匹配的文件)。當前目錄裡只有一個文件以字母 t 開頭的話這將是可靠的。但是如果當前目錄裡有不止一個文件以字母 t 開頭,shell 將試著進入第一個符合匹配方案的目錄,這個目錄是以字母表排序的第一個目錄,這個目錄也許是也許不是你所期望的。    通配符 * 的一個更實際的用途是通配你要執行的命令中的多個名字相似的文件。例如,假設當前目錄裡包含以下文件:    ch1.doc  ch2.doc  ch3.doc chimp config  mail/ test/ tools/    如果你需要打印所有擴展名是 .doc 的文件,你能使用象這樣




Copyright © Linux教程網 All Rights Reserved