IT貓撲網(wǎng):您身邊最放心的安全下載站! 最新更新|軟件分類|軟件專題|手機版|論壇轉(zhuǎn)貼|軟件發(fā)布

您當前所在位置: 首頁操作系統(tǒng)LINUX → linux shell教程 細說shell編程

linux shell教程 細說shell編程

時間:2015-06-28 00:00:00 來源:IT貓撲網(wǎng) 作者:網(wǎng)管聯(lián)盟 我要評論(0)

  Shell本身是一個用C語言編寫的程序,它是用戶使用Linux的橋梁。Shell既是一種命令語言,又是一種程序設(shè)計語言。作為命令語言,它交互式地解釋和執(zhí)行用戶輸入的命令;作為程序設(shè)計語言,它定義了各種變量和參數(shù),并提供了許多在高級語言中才具有的控制結(jié)構(gòu),包括循環(huán)和分支。它雖然不是Linux系統(tǒng)核心的一部分,但它調(diào)用了系統(tǒng)核心的大部分功能來執(zhí)行程序、建立文件并以并行的方式協(xié)調(diào)各個程序的運行。因此,對于用戶來說,shell是最重要的實用程序,深入了解和熟練掌握shell的特性極其使用方法,是用好Linux系統(tǒng)的關(guān)鍵??梢哉f,shell使用的熟練程度反映了用戶對Linux使用的熟練程度。

  一、什么是shell

  當一個用戶登錄Linux系統(tǒng)之后,系統(tǒng)初始化程序init就為每一個用戶運行一個稱為shell(外殼)的程序。那么,shell是什么呢?確切一點說,shell就是一個命令行解釋器,它為用戶提供了一個向Linux內(nèi)核發(fā)送請求以便運行程序的界面系統(tǒng)級程序,用戶可以用shell來啟動、掛起、停止甚至是編寫一些程序。

  當用戶使用Linux時是通過命令來完成所需工作的。一個命令就是用戶和shell之間對話的一個基本單位,它是由多個字符組成并以換行結(jié)束的字符串。shell解釋用戶輸入的命令,就象DOS里的command.com所做的一樣,所不同的是,在DOS中,command.com只有一個,而在Linux下比較流行的shell有好幾個,每個shell都各有千秋。一般的Linux系統(tǒng)都將bash作為默認的shell。

  二、幾種流行的shell

  目前流行的shell有ash、bash、ksh、csh、zsh等,你可以用下面的命令來查看你自己的shell類型:

  #echo $SHELL

  $SHELL是一個環(huán)境變量,它記錄用戶所使用的shell類型。你可以用命令:

  #shell-name

  來轉(zhuǎn)換到別的shell,這里shell-name是你想要嘗試使用的shell的名稱,如ash等。這個命令為用戶又啟動了一個shell,這個shell在最初登錄的那個shell之后,稱為下級的shell或子shell。使用命令:

  $exit

  可以退出這個子shell。

  使用不同的shell的原因在于它們各自都有自己的特點,下面作一個簡單的介紹:

  1.ash

  ash shell是由Kenneth Almquist編寫的,Linux中占用系統(tǒng)資源最少的一個小shell,它只包含24個內(nèi)部命令,因而使用起來很不方便。

  2.bash

  bash是Linux系統(tǒng)默認使用的shell,它由Brian Fox和Chet Ramey共同完成,是Bourne Again Shell的縮寫,內(nèi)部命令一共有40個。Linux使用它作為默認的shell是因為它有諸如以下的特色:

  (1)可以使用類似DOS下面的doskey的功能,用方向鍵查閱和快速輸入并修改命令。

  (2)自動通過查找匹配的方式給出以某字符串開頭的命令。

  (3)包含了自身的幫助功能,你只要在提示符下面鍵入help就可以得到相關(guān)的幫助。

  3.ksh

  ksh是Korn shell的縮寫,由Eric Gisin編寫,共有42條內(nèi)部命令。該shell最大的優(yōu)點是幾乎和商業(yè)發(fā)行版的ksh完全兼容,這樣就可以在不用花錢購買商業(yè)版本的情況下嘗試商業(yè)版本的性能了。

  4.csh

  csh是Linux比較大的內(nèi)核,它由以William Joy為代表的共計47位作者編成,共有52個內(nèi)部命令。該shell其實是指向/bin/tcsh這樣的一個shell,也就是說,csh其實就是tcsh。

  5.zch

  zch是Linux最大的shell之一,由Paul Falstad完成,共有84個內(nèi)部命令。如果只是一般的用途,是沒有必要安裝這樣的shell的。

  3. shell程序設(shè)計(基礎(chǔ)部分)

  其實作為命令語言交互式地解釋和執(zhí)行用戶輸入的命令只是shell功能的一個方面,shell還可以用來進行程序設(shè)計,它提供了定義變量和參數(shù)的手段以及豐富的程序控制結(jié)構(gòu)。使用shell編程類似于DOS中的批處理文件,稱為shell script,又叫shell程序或shell命令文件。

  1.shell基本語法

  shell的基本語法主要就是如何輸入命令運行程序以及如何在程序之間通過shell的一些參數(shù)提供便利手段來進行通訊。

  (1)輸入輸出重定向

  在Linux中,每一個進程都有三個特殊的文件描述指針:標準輸入(standard input,文件描述指針為0)、標準輸出(standard output,文件描述指針為1)、標準錯誤輸出(standard error,文件描述指針為2)。這三個特殊的文件描述指針使進程在一般情況下接收標準輸入終端的輸入,同時由標準終端來顯示輸出,Linux同時也向使用者提供可以使用普通的文件或管道來取代這些標準輸入輸出設(shè)備。在shell中,使用者可以利用">"和"<"來進行輸入輸出重定向。如:

  command>file:將命令的輸出結(jié)果重定向到一個文件。

  command>&file:將命令的標準錯誤輸出一起重定向到一個文件。

  command>>file:將標準輸出的結(jié)果追加到文件中。

  command>>&file:將標準輸出和標準錯誤輸出的結(jié)構(gòu)都追加到文件中。

  command

  (2)管道pipe

  pipe同樣可以在標準輸入輸出和標準錯誤輸出間做代替工作,這樣一來,可以將某一個程序的輸出送到另一個程序的輸入,其語法如下:

  command1| command2[| command3...]

  也可以連同標準錯誤輸出一起送入管道:

  command1| &command2[|& command3...]

  (3)前臺和后臺

  在shell下面,一個新產(chǎn)生的進程可以通過用命令后面的符號";"和"&"來分別以前臺和后臺的方式來執(zhí)行,語法如下:

  command

  產(chǎn)生一個前臺的進程,下一個命令須等該命令運行結(jié)束后才能輸入。

  command &

  產(chǎn)生一個后臺的進程,此進程在后臺運行的同時,可以輸入其他的命令。

  2。shell程序的變量和參數(shù)

  像高級程序設(shè)計語言一樣,shell也提供說明和使用變量的功能。對shell來講,所有變量的取值都是一個字符串,shell程序采用$var的形式來引用名為var的變量的值。

  Shell有以下幾種基本類型的變量:

  (1)shell定義的環(huán)境變量

  shell在開始執(zhí)行時就已經(jīng)定義了一些和系統(tǒng)的工作環(huán)境有關(guān)的變量,這些變量用戶還可以重新定義,常用的shell環(huán)境變量有:

  HOME:用于保存注冊目錄的完全路徑名。

  PATH:用于保存用冒號分隔的目錄路徑名,shell將按PATH變量中給出的順序搜索這些目錄,找到的第一個與命令名稱一致的可執(zhí)行文件將被執(zhí)行。

  TERM:終端的類型。

  UID:當前用戶的標識符,取值是由數(shù)字構(gòu)成的字符串。

  PWD:當前工作目錄的絕對路徑名,該變量的取值隨cd命令的使用而變化。

  PS1:主提示符,在特權(quán)用戶下,缺省的主提示符是"#",在普通用戶下,缺省的主提示符是"$"。

  PS2:在shell接收用戶輸入命令的過程中,如果用戶在輸入行的末尾輸入"\"然后回車,或者當用戶按回車鍵時shell判斷出用戶輸入的命令沒有結(jié)束時,顯示這個輔助提示符,提示用戶繼續(xù)輸入命令的其余部分,缺省的輔助提示符是">"。

#p#副標題#e#

  (2)用戶定義的變量

  用戶可以按照下面的語法規(guī)則定義自己的變量:

  變量名=變量值

  要注意的一點是,在定義變量時,變量名前不應(yīng)加符號"$",在引用變量的內(nèi)容時則應(yīng)在變量名前加"$";在給變量賦值時,等號兩邊一定不能留空格,若變量中本身就包含了空格,則整個字符串都要用雙引號括起來。

  在編寫shell程序時,為了使變量名和命令名相區(qū)別,建議所有的變量名都用大寫字母來表示。

  有時我們想要在說明一個變量并對它設(shè)定為一個特定值后就不在改變它的值,這可以用下面的命令來保證一個變量的只讀性:

  readly 變量名

  在任何時候,建立的變量都只是當前shell的局部變量,所以不能被shell運行的其他命令或shell程序所利用,export命令可以將一局部變量提供給shell執(zhí)行的其他命令使用,其格式為:

  export 變量名

  也可以在給變量賦值的同時使用export命令:

  export 變量名=變量值

  使用export說明的變量,在shell以后運行的所有命令或程序中都可以訪問到。

  (3)位置參數(shù)

  位置參數(shù)是一種在調(diào)用shell程序的命令行中按照各自的位置決定的變量,是在程序名之后輸入的參數(shù)。位置參數(shù)之間用空格分隔,shell取第一個位置參數(shù)替換程序文件中的,第二個替換,依次類推。是一個特殊的變量,它的內(nèi)容是當前這個shell程序的文件名,所以,不是一個位置參數(shù),在顯示當前所有的位置參數(shù)時是不包括的。

  (4)預(yù)定義變量

  預(yù)定義變量和環(huán)境變量相類似,也是在shell一開始時就定義了的變量,所不同的是,用戶只能根據(jù)shell的定義來使用這些變量,而不能重定義它。所有預(yù)定義變量都是由$符和另一個符號組成的,常用的shell預(yù)定義變量有:

  $#:位置參數(shù)的數(shù)量

  $*:所有位置參數(shù)的內(nèi)容

  $?:命令執(zhí)行后返回的狀態(tài)

  $$:當前進程的進程號

  $!:后臺運行的最后一個進程號

 ?。寒斍皥?zhí)行的進程名

  其中,"$?"用于檢查上一個命令執(zhí)行是否正確(在Linux中,命令退出狀態(tài)為0表示該命令正確執(zhí)行,任何非0值表示命令出錯)。

  "$$"變量最常見的用途是用作臨時文件的名字以保證臨時文件不會重復(fù)。

  (5)參數(shù)置換的變量

  shell提供了參數(shù)置換能力以便用戶可以根據(jù)不同的條件來給變量

關(guān)鍵詞標簽:linux,shell教程,shel

相關(guān)閱讀

文章評論
發(fā)表評論

熱門文章 安裝紅帽子RedHat Linux9.0操作系統(tǒng)教程 安裝紅帽子RedHat Linux9.0操作系統(tǒng)教程 Tomcat9.0如何安裝_Tomcat9.0環(huán)境變量配置方法 Tomcat9.0如何安裝_Tomcat9.0環(huán)境變量配置方法 多種操作系統(tǒng)NTP客戶端配置 多種操作系統(tǒng)NTP客戶端配置 Linux操作系統(tǒng)修改IP Linux操作系統(tǒng)修改IP

相關(guān)下載

    人氣排行 Linux下獲取CPUID、硬盤序列號與MAC地址 dmidecode命令查看內(nèi)存型號 linux tc實現(xiàn)ip流量限制 安裝紅帽子RedHat Linux9.0操作系統(tǒng)教程 linux下解壓rar文件 lcx.exe、nc.exe、sc.exe入侵中的使用方法 Ubuntu linux 關(guān)機、重啟、注銷 命令 查看linux服務(wù)器硬盤IO讀寫負載