Linux的Shell程式設計 Shell基本語法

2021-07-03 05:10:17 字數 2356 閱讀 5917

像高階程式語言一樣,shell也提供說明和使用變數的功能。對shell來講,所有變數的取值都是乙個字串,shell程式採用$var的形式來引用名為var的變數的值。

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的值。

b. 變數=$:如果設定了引數,則用引數的值置換變數的值,否則把變數設定成word,然後再用word替換引數的值。注意,位置引數不能用於這種方式,因為在shell程式中不能為位置引數賦值。

c. 變數=$:如果設定了引數,則用引數的值置換變數的值,否則就顯示word並從shell中退出,如果省略了word,則顯示標準信 息。這種變數要求一定等於某乙個引數的值。如果該引數沒有設定,就顯示乙個資訊,然後退出,因此這種方式常用於出錯指示。

d. 變數=$:如果設定了引數,則用word置換變數,否則不進行置換。

所有這4種形式中的「引數」既可以是位置引數,也可以是另乙個變數,只是用位置引數的情況比較多。

(有一篇更為詳細的文章見:

文章**:

Linux的shell程式設計

shell指令碼第一行必須以 bin sh 開頭。對shell來講,所有變數的取值都是乙個字串,shell程式採用 var的形式來引用名為var的變數的值。1.1.1 shell定義的環境變數 shell在開始執行的時候就已經定義了一些和系統的工作環境相關的變數,這些變數使用者還可以重新定義。hom...

shell程式設計 linux

shell 指令碼程式的編寫步驟如下 1 用編輯器 如 vi 編輯包含所有操作的 sh檔案 2 修改檔案的許可權為可讀可執行 3 執行當前 shell 程式 注意 1 指令碼檔案中 注釋行有 開始 2 指令碼一般第一行為 bin sh 可以在執行別的型別的指令碼的時候直接執行這種型別的指令碼 3 執...

shell程式設計(Linux)

c語言 編譯型,main.c main.exe,執行效率高,開發效率低。shell程式設計 解釋型main.sh通過需要通過乙個直譯器,解釋執行main.sh執行效率高開發效率低。python 解釋型語言。指令碼其實是傳給直譯器的引數,指令碼主要用在系統維護上。shell的基本語法 1.變數 1 本...