『壹』 linux下的shell是什麼
什麼是shell
shell是用戶和Linux
操作系統
之間的
介面
。Linux中有多種shell,其中預設使用的是Bash。本章講述了shell的工作原理,shell的種類,shell的一般操作及Bash的
特性
。
什麼是shell
Linux系統的shell作為操作系統的
外殼
,為用戶提供使用操作系統的介面。它是
命令語言
、命令
解釋程序
及
程序設計語言
的統稱。
shell是用戶和
Linux內核
之間的介面
程序
,如果把Linux內核想像成一個
球體
的中心,shell就是圍繞
內核
的外層。當從shell或其他程序向Linux傳遞命令時,內核會做出相應的反應。
shell是一個命令語言
解釋器
,它擁有自己內建的shell命令集,shell也能被系統中其他
應用程序
所調用。用戶在提示符下輸入的命令都由shell先解釋然後傳給Linux核心。
Shell是一種具備
特殊功能
的程序,
它是介於使用者和
UNIX/linux
操作系統之核心
程序(kernel)間的一個介面。為什麼我們說
shell
是一種介於系統核心程序與使用者
間的中介者呢?讀過操作系統概論的讀者們都知道操作系統是一個
系統資源
的管理者與分
配者,當您有需求時,您得向系統提出;從操作系統的角度來看,它也必須防止使用者因
為錯誤的操作而造成系統的傷害?眾所周知,對
計算機
下命令得透過命令(command)
或
是程序(program);程序有編譯器(compiler)將程序轉為
二進制代碼
,可是命令呢?
其實shell
也是一支程序,它由
輸入設備
讀取命令,再將其轉為計算機可以了解的機械碼,
然後執行它。
各種操作系統都有它自己的
shell,以
DOS
為例,它的
shell
就是
command.com文
件。如同
DOS
下有
NDOS,4DOS,DRDOS
等不同的命令解譯程序可以取代標準的
command.com
,UNIX
下除了
Bourne
shell(/bin/sh)
外還有
C
shell(/bin/csh)、
Korn
shell(/bin/ksh)、Bourne
again
shell(/bin/bash)、Tenex
C
shell(tcsh)
等其它的
shell。UNIX/linux將
shell
獨立於核心程序之外,
使得它就如同一般的應用
程序,
可以在不影響操作系統本身的情況下進行修改、更新版本或是添加新的功能。
有一些命令,比如改變工作目錄命令cd,是包含在shell
內部
的。還有一些命令,例如
拷貝
命令cp和移動命令rm,是存在於
文件系統
中某個目錄下的單獨的程序。對用戶而言,不必關心一個命令是建立在shell內部還是一個單獨的程序。
shell首先檢查命令是否是
內部命令
,若不是再檢查是否是一個應用程序(這里的應用程序可以是Linux本身的
實用程序
,如ls和rm,也可以是購買的商業程序,如xv,或者是
自由軟體
,如emacs)。然後shell在搜索
路徑
里尋找這些應用程序(搜索路徑就是一個能找到可執行程序的目錄列表)。如果鍵入的命令不是一個內部命令並且在路徑里沒有找到這個
可執行文件
,將會顯示一條錯誤信息。如果能夠成功找到命令,該內部命令或應用程序將被分解為
系統調用
並傳給Linux內核。
shell的另一個重要特性是它自身就是一個解釋型的程序設計語言,shell程序設計語言支持絕大多數在
高級語言
中能見到的程序
元素
,如
函數
、
變數
、
數組
和程序控制結構。shell
編程語言
簡單易學,任何在提示符中能鍵入的命令都能放到一個可執行的shell程序中。
當普通用戶成功登錄,系統將執行一個稱為shell的程序。正是shell進程提供了命令行提示符。作為默認值(TurboLinux系統默認的shell是BASH),對普通用戶用「$」作提示符,對超級用戶(root)用「#」作提示符。
一旦出現了shell提示符,就可以鍵入
命令名稱
及命令所需要的
參數
。shell將執行這些命令。如果一條命令花費了很長的時間來運行,或者在屏幕上產生了大量的輸出,可以從
鍵盤
上按ctrl+c發出中斷
信號
來中斷它(在正常結束之前,中止它的執行)。
當用戶准備結束登錄對話進程時,可以鍵入logout命令、exit命令或文件結束符(EOF)(按ctrl+d實現),結束登錄。
『貳』 linux shell 如何讀取文件特定位置的數據
題主你好,
測試所用的搭孝仿文本文件知纖t1內容如慎答下:
=====
希望可以幫到題主, 歡迎追問.
『叄』 Linux系統Shell命令常用功能使用詳解
Linux系統中Shell不僅僅是一個命令,而且是其他命令的解釋器。可以調試其他命令,從而完成編譯。那麼Linux系統中Shell命令應該怎麼使用呢?
其實作為命令語言互動式地解釋和執行用戶輸入的命令只是Shell功能的一個方面,Shell還可以用來進行程序設計,它提供了定義變數和參數的手段以及豐富的程序控制結構。使用Shell編程類似於DOS中的批處理文件,稱為Shell script,又叫Shell程序或Shell命令文件。
Shell基本語法
像高級程序設計語言一樣,Shell也提供說明和使用變數的功能。對Shell來講,所有變數的取值都是一個字串,Shell程序採用$var的形式來引用名為var的變數的值。
Shell有以下幾種基本類型的變數。
(1)Shell定義的環境變數:
Shell在開始執行時就已經定義了一些和系統的工作環境有關的變數,用戶還可以重新定義這些變數,常用的Shell環境變數有:
HOME 用於保存注冊目錄的完全路徑名。
PATH 用於保存用冒號分隔的目錄路徑名,Shell將按PATH變數中給出的順序搜索這些目錄,找到的第一個與命令名稱一致的可執行文件將被執行。
TERM 終端的類型。
UID 當前用戶的識別字,取值是由數位構成的字串。
PWD 當前工作目錄的絕對路徑名,該變數的取值隨cd命令的使用而變化。
PS1 主提示符,在特權用戶下,默認的主提示符是#,在普通用戶下,默認的主提示符是$。
PS2 在Shell接收用戶輸入命令的過程中,如果用戶在輸入行的末尾輸入「/」然後回車,或者當用戶按回車鍵時Shell判斷出用戶輸入的命令沒有結束時,就顯示這個輔助提示符,提示用戶繼續輸入命令的其餘部分,默認的輔助提示符是》。
(2)用戶定義的變數:
用戶可以按照下面的語法規則定義自己的變數:
變數名=變數值
要注意的一點是,在定義變數時,變數名前不應加符號$,在引用變數的內容時則應在變數名前加$;在給變數賦值時,等號兩邊一定不能留空格,若變數中本身就包含了空格,則整個字串都要用雙引號括起來。
在編寫Shell程序時,為了使變數名和命令名相區別,建議所有的變數名都用大寫字母來表示。
有時我們想要在說明一個變數並對它設置為一個特定值後就不在改變它的值時,可以用下面的命令來保證一個變數的只讀性:
readonly 變數名
在任何時候,創建的變數都只是當前Shell的局部變數,所以不能被Shell運行的其他命令或Shell程序所利用,而export命令可以將一個局部變數提供給Shell執行的其他命令使用,其格式為:
export 變數名
也可以在給變數賦值的同時使用export命令:
export 變數名=變數值
使用export說明的變數,在Shell以後運行的所有命令或程序中都可以訪問到。
(3)位置參數:
位置參數是一種在調用Shell程序的命令行中按照各自的位置決定的變數,是在程序名之後輸入的參數。位置參數之間用空格分隔,Shell取第一個位置參數替換程序文件中的$1,第二個替換$2,依次類推。$0是一個特殊的變數,它的內容是當前這個Shell程序的文件名,所以,$0不是一個位置參數,在顯示當前所有的位置參數時是不包括$0的。
(4)預定義變數:
預定義變數和環境變數相類似,也是在Shell一開始時就定義了的變數。所不同的是,用戶只能根據Shell的定義來使用這些變數,而不能重定義它。所有預定義變數都是由$符和另一個符號組成的,常用的Shell預定義變數有:
$# 位置參數的數量。
$* 所有位置參數的內容。
$? 命令執行後返回的狀態。
$$ 當前進程的進程號。
$! 後台運行的最後一個進程號。
$0 當前執行的進程名。
其中,$?用於檢查上一個命令執行是否正確。(在Linux中,命令退出狀態為0表示該命令正確執行,任何非0值表示命令出錯。)
$$變數最常見的用途是用做暫存文件的名字以保證暫存文件不會重復。
(5)參數置換的變數:
Shell提供了參數置換功能以便用戶可以根據不同的條件來給變數賦不同的值。參數置換的變數有4種,這些變數通常與某一個位置參數相聯系,根據指定的位置參數是否已經設置類決定變數的取值,它們的語法和功能分別如下。
a. 變數=${參數-word}:如果設置了參數,則用參數的值置換變數的值,否則用word置換。即這種變數的值等於某一個參數的值,如果該參數沒有設置,則變數就等於word的值。
b. 變數=${參數=word}:如果設置了參數,則用參數的值置換變數的值,否則把變數設置成word,然後再用word替換參數的值。注意,位置參數不能用於這種方式,因為在Shell程序中不能為位置參數賦值。
c. 變數=${參數?word}:如果設置了參數,則用參數的值置換變數的值,否則就顯示word並從Shell中退出,如果省略了word,則顯示標准信息。這種變數要求一定等於某一個參數的值。如果該參數沒有設置,就顯示一個信息,然後退出,因此這種方式常用於出錯指示。
d. 變數=${參數+word}:如果設置了參數,則用word置換變數,否則不進行置換。
所有這4種形式中的「參數」既可以是位置參數,也可以是另一個變數,只是用位置參數的情況比較多。