Linux程式設計 Shell中的變數

2021-10-07 17:52:01 字數 2971 閱讀 6565

系統啟動後會產生許多環境變數,使用者可以使用 set 命令檢視這些環境變數

家目錄位置變數 home

系統語言變數 lang

臨時修改系統語言可以重新指定此變數的值:

lang=zh_cn.utf-8

互動程式變數 shell

命令搜尋路徑變數 path

主提示符變數 ps1

#檢視當前使用的主提示符表示式

輔助提示符變數 ps2

唯讀環境變數

檢視系統中的唯讀環境變數如下:

在配置檔案中修改環境變數

傳遞引數的位置變數

bash 定義了 9 個位置變數,分別是$1、 $2、 $3、 $4…$9。指令碼編寫者在指令碼中引用這 9 個變數,獲取傳遞給指令碼的引數。

系統預先定義的變數

常見的預定義變數及其含義如下

 $0:儲存當前程或指令碼的名稱。

 $*:儲存傳遞給指令碼或程序的所有引數。

 $$:當前程序或指令碼的 pid 號。

 $!:後台執行的最後乙個程序的 pid 號。

 $?:用於返回上一條命令是否成功執行。如果成功執行,將返回數字 0,否則返回非零數字(通常情況下都返回數字 1)。

 $#:用於儲存指令碼的引數個數。

使用者自定義變數補充知識:

如果使用者希望定義乙個不能更改值的唯讀變數,可以先定義變數,然後使用readonly 命令將變數轉換為唯讀變數。

#定義變數 pi

# pi=3.14

#使用命令 readonly 將變數 pi 轉換為唯讀變數,然後驗證

# readonly pi

# pi=3.1415

-bash: pi: readonly variable

使用變數運算的例子:

#先定義變數 a 和 b 的值

# a=12

# b=12

#使用 expr 命令計算變數 a、 b 之和、

# expr $a + $b

24使用環境變數$random 產生隨機數

清除變數可以使用命令 unset:

shell 中的陣列

與使用變數一樣,使用陣列前也必須對其進行定義(許多程式語言將這個過程稱為宣告),定義陣列時應該為其賦值。

【 陣列的格式】

完整的陣列元素由陣列名和索引組成,其格式如下:

array[index]

【 定義資料】

( 1)在 bash 中定義陣列有兩種方法,第一種方法是直接在定義時為所有的陣列元素

賦值:#在定義陣列時為其賦值

# array=(1 2 3 4 5)

使用這種方法對陣列進行定義時,系統會自動為陣列中的各元素進行賦值操作。例如

上面的示例中,會自動為 array[0]賦值為 1、 array[1]賦值為 2……依此類推,直到完

成對所有陣列元素的賦值操作為止。

( 2)第二種方法是對陣列中的每個陣列元素進行賦值:

#為陣列中的特定元素賦值

# array[0]=1; array[4]=5; array[3]=4

使用這種方法對陣列定義時,可以不按照陣列下標的先後順序進行操作,也不必對數

組中的每乙個元素都賦值。

( 3)如果需要修改陣列中某個元素的值,可以使用陣列定義中的第二種方法:

#使用重新定義的方法修改陣列元素的值

# array[1]=2

# array[2]=3

陣列的使用

( 1)如果需要引用陣列中的某個元素,可以使用陣列名稱加索引的方式:

#使用 echo 命令顯示陣列 array 中第 3 個元素的值

# echo $

3與其他語言中引用陣列元素不同,在 bash 中需要將陣列元素放入大括號「 {}」內。其

目的是為了避免 bash 將陣列名誤解為乙個變數。

( 2)如果不指定陣列索引,將會顯示陣列中第 1 個元素的值:

#不使用下標時,將預設引用陣列中的第 1 個元素

# echo $array

1( 3)有時可能希望看到陣列中所有元素的值,這樣做的目的可能是為了檢查其值是否有錯誤:

#輸出陣列中所有元素的值

# echo $

1 2 3 4 5

在上面的示例命令中,「 *」表示所有元素下標。

( 4)當陣列中的元素非常多時,可能檢視起來非常不方便。這時可以指定檢視的元素範圍,例如:

#檢視陣列中下標大於等於 2 的所有元素的值

# echo $

3 4 5

( 5)有時需要獲得陣列的長度,即陣列中一共有多少個元素。這時可以使用以下形式:

#顯示陣列中的元素個數

# echo $

5上面這個示例命令輸出的數字 5 表示陣列中有 5 個元素,而非陣列中的元素下標最大值。

利用陣列是實現排序:

清除陣列

不再使用陣列時,應該清除陣列,以**這些陣列占用的系統資源。與變數相同,清

除陣列也使用 unset 命令。

( 1)清除陣列 array 的第 1 個元素:

#使用 unset 命令清除陣列中的第 1 個元素

# unset array[0]

( 2)清除整個陣列:

#使用 unset 命令清除整個陣列並驗證

# unset array

# echo $

Linux的shell程式設計

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

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

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

linux中的shell程式設計中的命令替換

編寫如下指令碼進行測試 bin bash index 1 for user in cat etc passwd cut d f 1 doecho this is the index user user index index 1 done其中cut d f 1 中的 d指定分隔符為 f 1 指定分隔...