文章目錄
- bash中的引號
- linux變量的分類
- 1.環境變量
- 2.本地變量:
- 3.局部變量
- 4.內置變量
- 5. 位置參數變量
- 6. 特殊變量
- 變量的定義規則
- 8.數組
bash中的引號
雙引號"" :會把引號的內容當成整體來看待,允許通過 符號引用其他變量值單引 號 ′ ′ :會把引號的內容當成整體來看待,禁止引用其他變量值, s h e l l 中特殊符號都被視為普通字符反撇號 ‘ ‘ :反撇號和 符號引用其他變量值 單引號'' :會把引號的內容當成整體來看待,禁止引用其他變量值,shell中特殊符號都被視為普通字符 反撇號`` :反撇號和 符號引用其他變量值單引號′′:會把引號的內容當成整體來看待,禁止引用其他變量值,shell中特殊符號都被視為普通字符反撇號‘‘:反撇號和()一樣,引號或括號里的命令會優先執行,如果存在嵌套,反撇號不能用
linux變量的分類
在Linux操作系統中,變量是用來存儲數據的一種方式,它們可以被用來存儲字符串、數字、文件路徑等。根據用途和類型,Linux中的變量可以分為以下幾類:
1.環境變量
環境變量是全局可用的變量,它們影響著系統的行為和程序的執行方式。環境變量可以進一步細分為以下兩種:
系統級環境變量
系統級環境變量是所有用戶共享的變量,通常定義在 /etc/profile 或 /etc/profile.d/*.sh 文件中。這些變量對整個系統生效,適用于所有登錄系統的用戶。
用戶級環境變量
用戶級環境變量僅對特定用戶有效,通常定義在用戶的家目錄下的配置文件中,例如 ~/.bash_profile 或 ~/.bashrc。這些變量會在用戶登錄時加載,并覆蓋系統級變量的值。
2.本地變量:
當前用戶自定義的變量。當前進程中有效,其他進程及當前進程的子進程無效,其作用范圍僅限于當前 Shell 會話。這類變量可以通過 export 命令導出為環境變量,從而使其在子進程中可用。例如
A="Hello World"
export A
3.局部變量
局部變量的作用范圍僅限于定義它的腳本或函數內部。一旦腳本或函數結束,局部變量就會被銷毀。例如,在 Shell 腳本中定義的變量如果沒有使用export導出,則只在腳本內部有效。
4.內置變量
內置變量是由 Shell 提供的標準變量,用于存儲與Shell運行相關的狀態信息。例如:
$PATH:指定可執行文件的搜索路徑。
$HOME:表示當前用戶的主目錄。
$PS1:定義 Shell 提示符的格式。
5. 位置參數變量
位置參數變量用于傳遞命令行參數到腳本中。例如:
$0:表示腳本名稱。
$1, $2, …:表示傳遞給腳本的第一個、第二個參數等。
$#:表示傳遞給腳本的參數個數。
$*:腳本后面所有參數,參數當成一個整體輸出,每一個變量參數之間以空格隔開
$@: 腳本后面所有參數,參數是獨立的,也是全部輸出
6. 特殊變量
特殊變量是由Shell預定義的變量,用于存儲特定的信息。例如:
$$:表示當前Shell進程的 PID。
$?:上一條命令執行后返回的狀態,當返回狀態值為0時表示執行正常,非0值表示執行異常或出錯若退出狀態值為0,表示命令運行成功若退出狀態值為127,表示command not found若退出狀態值為126,表示找到了該命令但無法執行(權限不夠)若退出狀態值為1&2,表示沒有那個文件或目錄
變量的定義規則
1.默認情況下,shell里定義的變量是不分類型的,可以給變量賦與任何類型的值;等號兩邊不能有空格,對于有空格的字符串做為賦值時,要用引號引起來
變量名=變量值2.變量的獲取方式:
$變量名
${變量名}3.變量名區分大小寫 4.變量名可以是字母或數字或下劃線,但是不能以數字開頭或者特殊字符5.取消變量:
unset 變量名6.命令的執行結果可以保存到變量
7.有類型變量 declare
-i 將變量看成整數
-r 使變量只讀 readonly
-x 標記變量通過環境導出 export
-a 指定為索引數組(普通數組);查看普通數組
-A 指定為關聯數組;查看關聯數組
8.數組
在Linux系統中,Bash shell 提供兩種類型的數組:普通數組和關聯數組。這兩種數組各有特點,適用于不同的場景。
普通數組
普通數組是基于索引的,索引通常是從0或1開始的,具體取決于你的設置。你可以使用整數作為索引來存儲和訪問數組元素。
1. 創建數組
方法1:使用括號
array=(1 2 3)
方法2:單獨賦值
array[0]=1
array[1]=2
array[2]=32. 訪問數組元素
訪問特定元素
echo ${array[0]} # 輸出第一個元素
訪問所有元素
echo ${array[@]} # 輸出所有元素
或者
echo ${array[*]} # 輸出所有元素3. 獲取數組長度
echo ${#array[@]} # 輸出數組長度
或者
echo ${#array[*]} # 輸出數組長度4. 遍歷數組
for element in "${array[@]}"
doecho $element
done
或者使用索引遍歷:
for (( i=0; i<${#array[@]}; i++ ))
doecho ${array[i]}
done5. 刪除數組元素
unset array[2] # 刪除索引為2的元素
或者刪除整個數組:
unset array6. 修改數組元素
array[1]=newElement # 將索引為1的元素修改為newElement7. 在數組中添加元素
array+=([3]=5) # 在數組末尾添加新元素或在指定位置添加元素,例如在索引3處添加5
或者使用+=操作符在末尾添加:
array+=(5) # 在數組末尾添加58. 獲取數組的索引列表
echo ${!array[@]} # 輸出所有索引號,例如0 1 2等
關聯數組
關聯數組(也稱為映射或字典)使用字符串作為索引來存儲元素。這使得它們非常適合存儲鍵值對。
1.創建和初始化關聯數組
在較新的 Bash 版本中(Bash 4.0及以上),你可以使用declare命令來聲明關聯數組。
# 聲明關聯數組
declare -A assoc_arr
# 初始化關聯數組
assoc_arr[key1]=value1
assoc_arr[key2]=value22.訪問關聯數組元素
echo ${assoc_arr[key1]} # 輸出 value1
declare -A #輸出declare -A assoc_arr='([key2]="value2" [key1]="value1" )'3.操作關聯數組
關聯數組還支持一些特殊的操作,比如列出所有鍵或值。
# 列出所有鍵
echo ${!assoc_arr[@]} # 輸出 key1 key2 等所有鍵
# 列出所有值
echo ${assoc_arr[@]} # 輸出 value1 value2 等所有值
echo ${assoc_arr[*]} # 輸出 value1 value2 等所有值