定義
系統和用戶之間的界面,實際上都是提供一個進行通信的語言這種語言的性質在很大程度上與作業系統的類型有關。例如分時系統與批處理系統雖然都是面向作業的系統,但是它們工作方式有重要區別,因此這兩種系統使用的通信語言也就有很大的不同。分時系統中,用戶與系統之間可以頻繁的進行互動作業用,用戶易於控制其作業在系統中運行的途徑,也能對系統的某些動作及時作業回響。所以分時作業系統中使用的通信語言一般比較簡單,只是一組要操作使系統進行某種工作的命令,這類語言通常稱為命令語言。而在批處理系統中,用戶一旦向系統提交子作業,就無法再對該作業的執行過程進行任何控制,因此用戶必須事先給出一系列命令,明確規定執行該作業的各個步驟,或指明針對各種中間結果,應選擇的運行途徑等,所以這種系統使用的通信語言一般比較複雜,功能較強,被稱為作業控制語言,或稱為命令控制語言。
SHELL語言
UNIX作業系統是一個分時式多用戶、互動型軟體系統,它和用戶的界面是一種命令語言,稱之為SHELL(外殼)語言,它的解釋程式同樣也稱為SHELL(即SHELL解釋程式)。
一般用法
UNIX系統問世以來已取得極大成功,除了由於系統的核心部分有許多突出的優點外,作為作業系統與用戶之間的接口——命令設計語言SHELL也起了不可忽視的作用。
SHELL語言本身也像高級程式設計語言一樣,具有變數、控制流程、子程式及中斷管理等方面的功能。
特點
(1)用SHELL語言編寫的命令檔案功能強大,易理解,已閱讀,易使用,它對大多數UNIX用戶來說,是最重要的一種程式。
(2)通過SHELL用戶編寫的大量程式組織起來,可使UNIX系統成為一個功能強大、使用方便的工具系統。
總之,SHELL雖說是一種命令語言,但其功能很強大,可與一般複雜的作業控制語言相媲美。所以SHELL構成了一個使用UNIX系統的良好環境。
SHELL變數
用戶可以使用52個SHELL變數,這些變數的值只能是字元串,變數名分別是26個英文小寫字母和26個英文大寫字母。SHELL過程用$a、$b、…、$z分別訪問這些變數,它們可以用set命令設定。
位置參數
可以將列印、編譯、執行等命令編寫成一個SHELL過程,取名為procdr1,當需要執行該過程時,使用命令:sh procdr1。但是,這種SHELL過程的用處是有限的,因為它只能處理源程式prog1.c,缺乏通用性。為了解決這一問題,SHELL使用了位置變數和位置參數。
用戶在編寫SHELL過程時,可以用位置變數代表待定的命令參數。位置變數最多可以用9個,分別用$1、$2、…、$9表示,因此可以將上述的procdr1改寫為下列形式:
這一SHELL過程就有了普遍的意義。在需要對某個源程式,如progn.c進行過程規定的操作時,使用命令:
SHELL過程名procdr1後跟的參數稱為位置參數,它們與位置變數一一對應,也就是在SHELL過程名後的第一個參數與$1對應,第二個參數與$2對應…,所以,位置參數最多也只能有9個。在procdr1中只用了兩個位置變數,它們分別與位置參數progn.c、progn.out對應。在執行SHELL過程中包含的各命令時,如該命令包含有位置變數,則先代換為相應的位置參數,然後再執行。
調用執行SHELL過程命令的一般形式為:
其中參數表是由位置參數組成的。
控制流
SHELL提供了一種程式設計語言具有的各種控制語句。例如,二路選擇語句if…then…else,多路選擇語句case,循環語句for、while,goto語句等。因此用戶可以編制出控制功能很強的SHELL過程。
簡單命令
簡單命令是SHELL命令語言的基礎,在檔案管理系統命令中,不少都是SHELL簡單命令。
基本格式
命令 參數
兩大類型
(1)系統提供的標準命令;
(2)用戶自編自用的命令。
特點
(1)多數命令名與命令功能緊密相符,如ls即list,ed即editor;
(2)參數有些可選,有些可省略;
(3)命令格式比較自由,如chdir或cd;
(4)簡單命令的數量易於擴充,且可以使用的類型因人而異。
後台命令
使用步驟
以互動形式使用SHELL簡單命令的步驟為:
(1)用戶輸入命令;
(2)等待其執行結束,終端上出現$提示符;
(3)最後在輸入一條命令。
注意事項
某些命令需要較長時間才能執行完畢,且在執行過程中不需要和用戶進行互動作用。為了提高用戶和系統的工作效率,可以在後台執行這種SHELL命令,也就是無需等待上一條命令執行結束,SHELL解釋程式就開始解釋執行後一條命令。
一條簡單命令通常是由一個進程執行的,為了使用戶在需要時能夠對執行後台命令的進行進行必要的干預和處理,SHELL在解釋執行後台命令時,先要在標準輸出設備顯示或列印執行該命令的有關程式號。下面出現$提示符,即可執行下一條命令。
輸入/輸出轉向命令
為了便於用戶和有關進程進行互動作用,它們常常就是與該進程相關的終端機輸入、輸出部分進行互動作用。但是某種情況下,例如用戶事先已將必要的輸出信息存放在某個檔案上,或者希望在某個檔案上得到輸出信息,那么就有必要改變標準輸入、輸出檔案,使之與指定的檔案或設備連線起來,SHELL向用戶提供一種手段,使得他們可以提出上述要求,這被稱之為標準輸入輸出轉向。
典例1
簡單命令:cat file1 file2
作用:將file1、file2依次在標準輸出檔案顯示出來。
但如果要求改變標準輸出,則可以寫為:cat file1 file2 >file3
作用:標準輸出轉向一般普通檔案file3。
注意:若轉向檔案file3原來並不存在,則SHELL解釋庫先要創建它;若它已經存在,,則認為這是一個空白文檔,重新改寫它。
典例2
cat file1 file2 >/dev/tty03
作用:轉向為另一終端顯示。
cat file1 file2 >/dev/plp
作用:轉向為印表機
典例3
如果希望執行命令時,輸出添加到某現存檔案的末端,則應該使用另一種輸出轉向符“>>”。
cat file1 file2 >>file3
標準輸入符同樣也可以要求加以改變,例如:we<file,將file作為執行SHELL命令we時的標準輸入,執行該命令時,把“file”檔案中的行數、字數、字元數送向標準輸出。
管道命令
必要性
簡單命令增加了後台及輸入、輸出轉向後,用戶使用起來更加方便了。但是簡單命令作為SHELL命令語言的最基本單位,其功能畢竟比較單一,因此有必要提供組合手段,以便靈活的把這些基本構件組合起來,形成各種功能更強的複合命令,SHELL提供了一種被稱為管道或流水線的組合方式。
利用管道可將一個命令的標準輸出作為另一個命令的標準輸入。
一般形式
管道命令的一般形式是一個命令或多個用:分隔開的命令序列:
雖然其中所有命令仍可帶輸入輸出轉向符,但是除了Command1的輸入轉向符、Commandn的輸出轉向符外,其他都不起作用。命令序列中最後一個命令結束作為管道線的結束,命令序列中最後一個命令的值,作為管道線的值。