本文主要瞭解了Linux系統中的Shell,以及什麼是BATH。 ...
Linux的Shell編程——認識BATH這個Shell
摘要:本文主要瞭解了Linux系統中的Shell,以及什麼是BATH。
什麼是Shell
Shell是一個命令行解釋器,它為用戶提供了一個向Linux內核發送請求以便運行程式的界面系統級程式,用戶可以用Shell來啟動、掛起、停止甚至編寫一些程式。
Shell處在內核與外層應用程式之間,起著協調用戶與系統的一致性、在用戶與系統之間進行交互的作用。Shell接收用戶輸入的命令,並把用戶的命令從類似abed的ASCII碼解釋為類似0101的機器語言,然後把命令提交到系統內核處理,當內核處理完畢之後,把處理結果再通過Shell返回給用戶。
與一般命令相比,Shell除了是一個命令行解釋器,同時還是一門功能強大的編程語言,易編寫,易調試,靈活性較強。作為一種命令級語言,Shell是解釋性的,組合功能很強,與操作系統有密切的關係,可以在Shell腳本中直接使用系統命令。大多數Linux系統的啟動相關文件(一般在/etc/rc.d目錄下)都是使用Shell腳本編寫的。
在Linux中操作的命令行界面就是Linux的Shell,這裡的Shell主要指的是Bash。
Shell的分類
目前Shell的版本有很多種,如Bourne Shell、C Shell、BASH、KSH、TCSH等,它們各有特點。
最重要的Shell是Bourne Shell,這個命名是為了紀念此Shell的發明者Steven Bourne。從1979年起,UNIX就開始使用Bourne Shell。Bourne Shell的主文件名為sh,開發人員便以sh作為Bourne Shell的主要識別名稱。
雖然Linux與UNIX一樣,可以支持多種Shell,但Bourne Shell的重要地位至今仍然沒有改變,許多UNIX系統中仍然使用sh作為重要的管理工具。它的工作從開機到關機,幾乎無所不包。在Linux中,用戶Shell主要是BASH,但在啟動腳本、編輯等很多工作中仍然使用Bourne Shell。
C Shell是廣為流行的Shell變種。C Shell主要在BSD版的UNIX系統中使用,發明者是柏克萊大學的Bill Joy。C Shell因為其語法和C語言類似而得名,這也使得UNIX的系統工程師在學習C Shell時感到相當方便。
Bourne Shell和C Shell形成了Shell的兩大主流派別,後來的變種大都吸取這兩種Shell的特點,如KSH、TCSH及BASH。
BASHShell是GNU計劃的重要工具之一,也是GNU系統中標準的Shell。BASH與sh相容,所以許多早期開發出來的Bourne Shell程式都可以繼續在BASH中運行。現在使用的Linux就使用BASH作為用戶的基本Shell。
BASH於1988年發佈,併在1995-1996年推出BASH 2.0。在這之前,廣為使用的版本是1.14,BASH 2.0增加了許多新的功能,以及具備更好的相容性。
註意,Shell的兩種主要語法類型有Bourne和C,這兩種語法彼此不相容。Boume家族主要包括sh、KSH、BASH、PSH、ZSH,C家族主要包括CSH、TCSH(BASH和ZSH在不同程式上支持CSH的語法)。
本章講述的腳本編程就是在BASH環境中進行的。不過,在Linux中除了可以支持BASH,還可以支持很多其他的Shell。我們可以通過/etc/shells文件來査詢Linux支持的Shell。命令如下:
1 [root@localhost ~]# cat /etc/shells 2 /bin/sh 3 /bin/bash 4 /sbin/nologin 5 /usr/bin/sh 6 /usr/bin/bash 7 /usr/sbin/nologin 8 [root@localhost ~]#
在Linux中,這些Shell是可以任意切換的,命令如下:
1 [root@localhost ~]# sh 2 sh-4.2# ls 3 anaconda-ks.cfg test 4 sh-4.2# exit 5 exit 6 [root@localhost ~]#
root用戶和其他可以登錄系統的普通用戶的登錄Shell都是/bin/bash,也就是Linux的標準Shell,所以這些用戶登錄之後可以執行許可權允許範圍內的所有命令。不過,所有的系統用戶(偽用戶)因為登錄Shell是/sbin/ndogin,所以不能登錄系統。