Linux Shell 003-變量
本節關鍵字:Linux、Shell、變量、全局變量、系統變量
相關指令:read、echo、unset、export
變量的含義
- 變量是用來臨時保存數據的,該數據是可以變化的數據。
- 如果某個內容需要多次使用,并且在代碼中重復出現,那么可以用變量代表該內容,這樣在修改內容的時候,僅僅需要修改變量的值。
- 在代碼運作的過程中,可能會把某些命令的執行結果保存起來,后續代碼需要使用這些結果,就可以直接使用這個變量。
變量的定義
定義變量:變量名=變量值
取消變量:unset 變量名
說明:變量名用來臨時保存數據,變量值是臨時的可變化的數據
變量的命名規則
- 變量名區分大小寫
- 變量名不能有特殊符號
- 變量名不能以數字開頭
- 等號兩邊不能有任何空格
- 變量名盡量做到見名知意
變量的定義方式
基本定義方式,直接復制給一個變量
# $A與${A}的區別
A=12345
echo $A
echo ${A:2:3}# 將命令執行結果賦值給變量
A=`hostname`
A=$(uname -r)
交互式定義變量,使用read命令
語法
read [選項] 變量名
常用選項
選項 | 說明 |
---|---|
-p | 定義提示用戶的信息 |
-n | 定義字符數 |
-s | 不顯示用戶輸入的內容 |
-t | 定義超時時間,默認單位為秒 |
使用示例
$ read -p "Input your name:" name
$ read -s -p "input your password" passwd
$ read -s -n 5 -p "input your password" passwd
$ read -s -t 5 -n 5 -p "input your password" passwd
變量值來自文件,使用read命令
語法
read [選項] 變量名 < 文件名
使用示例
$ cat test
192.168.203.66 255.255.255.0
$ read ip mask < test
$ echo $ip
192.168.203.66
$ echo $mask
255.255.255.0
定義有類型變量 - 使用declare
語法
declare [選項] 變量名=變量值
常用選項
選項 | 說明 |
---|---|
-i | 將變量看成整數 |
-r | 定義只讀變量 |
-a | 定義普通數組;查看普通數組 |
-A | 定義關聯數組;查看關聯數組 |
-x | 將變量通過環境導出,等價于export |
使用示例
$ declare -i A=123
$ echo $A
123
$ A=hello
$ echo $A
0
$ declare -r B=hello
$ echo $B
hello
$ B=world
-bash: B: readonly variable
$ unset B
-bash: unset: B: cannot unset: readonly variable
變量的分類
本地變量
概念:當前用戶自動以的變量,當前進程中有效,其他進程及當前進程的子進程無效
環境變量
概念:當前進程有效,并且能夠被子進程調用(進程樹 ps auxf | grep 進程名)
命令 | 說明 |
---|---|
env | 查看當前用戶的環境變量 |
set | 查詢當前用戶的所有變量 |
export | 變量名=變量值 或者 變量名=變量值;export 變量名 |
全局變量
概念:全局所有的用戶和程序都能調用,且集成,新建的用戶也默認能調用
相關配置文件:
文件名 | 說明 |
---|---|
$HOME/.bashrc | 當前用戶的bash信息,用戶登錄時讀取,如:定義別名、umask、函數等 |
$HOME/.bash_profile | 當前用戶的環境變量,用戶登錄時讀取 |
$HOME/.bash_logout | 當前用戶退出當前shell時讀取,如:定義用戶退出時執行的程序等 |
$HOME/.bash_history | 用戶的歷史命令,history -w 保存歷史記錄; history -c 清空歷史記錄 |
/etc/bashrc | 全局的bash信息,對所有用戶都生效 |
/etc/profile | 全局環境變量信息,對系統和所有用戶都生效 |
注意:以上文件修改后,都需要重新加載,可以使用source命令、.命令或退出重新登錄,例如:
$ source $HOME/.bashrc
$ . $HOME/.bashrc
用戶登錄系統讀取相關文件的順序
(1)/etc/profile
(2)$HOME/.bash_profile
(3)$HOME/.bashrc
(4)/etc/bashrc
(5)$HOME/.bash_logout
系統變量
概念:內置bash中變量,shell本身已經固定好了它的名字和作用
內置變量
內置變量 | 說明 |
---|---|
$? | 上一條命令的執行結果,0表示執行成功,非0表示執行失敗 |
$0 | 當前執行的程序或腳本名稱 |
$# | 腳本后面跟的參數個數 |
$* | 腳本后面所有參數,將所有參數當成一個整體輸出,每個參數之間使用空格隔開 |
$@ | 腳本后面所有參數,每個參數都是獨立的,依次全部輸出 |
$1-$9 | 腳本后面的位置參數,$1表示第一個位置的參數 |
10 ? {10}- 10?{n} | 腳本后面的位置參數擴展,從第10個位置開始,后面的位置數字必須用大括號{}括起來(2為數字以上括起來) |
$$ | 當前進程的進程號 |
$! | 當前終端,后臺運行的最后一個進程的進程號 |
!$ | 調用歷史最后一條命令中的參數 |
補充:轉義字符為 \,查看后臺運行的進程指令為jobs