【學習筆記】Shell-1 變數:命名規範、變數賦值/取值/取消、局部變數/全局變數、預設環境變數
1.Shell變數
從變數的實質上來說,變數名是指向一片用於存儲數據的記憶體空間。
Shell變數是一種弱類型的變數,即聲明變數時不需要指定其變數類型,也不需求遵循「先聲明再使用」的規定,想用即可用。
2.命名規範、變數賦值、變數取值、取消變數
2.1 變數名命名規範:
2.2.1 由英文字母、數字、下劃線組成,不能以數字開頭
2.2.2 區分大小寫
2.2.3 不能使用bash的關鍵字--疑問:怎麼查看bash的所有關鍵字?
2.2 變數賦值:
2.1.1 var_name1=studing #變數名=變數值,=兩邊無空格
2.1.2 var_name2='shell studing' #變數值中有空格時必須使用引號括起,單、雙引號都可以
2.1.3 var_name3="$var_name1" 或 var_name3=$var_name1 #如果變數值引用的是其他變數,則不能使用單引號括起
[root@testserver ~]# var_name1=studing [root@testserver ~]# var_name2='shell studing'
#var_name3引用var_name1的值 [root@testserver ~]# var_name3=$var_name1 [root@testserver ~]# echo $var_name3 studing [root@testserver ~]# var_name3='$var_name2' [root@testserver ~]# echo $var_name3 $var_name2 [root@testserver ~]# var_name3="$var_name2" [root@testserver ~]# echo $var_name3 shell studing [root@testserver ~]#
2.3 變數取值:變數名前加$,如$var_name 或 ${var_name},兩種方式都可以,推薦使用${var_name}。
2.4 取消變數:將變數從記憶體中釋放,語法:unset 變數名/函數名
[root@testserver ~]# echo $var_name3 shell studing [root@testserver ~]# unset var_name3 [root@testserver ~]# echo $var_name3
[root@testserver ~]#
3.局部變數、環境變數
3.1 局部變數
其作用域只在聲明它的Shell中,對其他Shell無效。每個Shell有自己的變數空間,彼此互不影響。
例如:打開兩個Shell窗口,如下圖:

3.2 環境變數:即全局變數。
使用export命令將當前Shell的變數導出為環境變數,可用於子Shell繼承、使用。子Shell、父Shell切換方法:在當前Shell中輸入bash並回車,即進入了子Shell;在子Shell中輸入exit即退出子Shell返回到父Shell。
export命令語法:export VAR=value #VAR變數名,value值,等號兩邊無空格
從如下示例中,可以看出:環境變數可從父Shell傳給子Shell,但子Shell的環境變數不能傳給父Shell。
![]() |
步驟: 1.登錄Shell,即為父Shell,輸入bash進入子Shell 2.=兩邊有空格,執行命令報錯 3.在子Shell中定義變數VAR,並導出為環境變數 4.輸入bash進入子Shell的子Shell,可稱為孫Shell 5.輸出子Shell中定義的變數VAR 6.輸入exit退出孫Shell 7.輸入exit退出子Shell 8.在父Shell中輸出子Shell中定義的變數VAR,為空 |
4.常見的bash預設環境變數
變數BASH:Bash Shell的全路徑
[root@testserver ~]# echo $BASH
/bin/bash
變數BASH_VERSION:Bash Shell的版本
[root@testserver ~]# echo $BASH_VERSION
4.1.2(2)-release
變數CDPATH:用於快速進入某個目錄。
示例:如/usr/local/shell_studying/test_shell目錄,每次進入test_shell目錄需輸入很長的路徑。定義變數CDPATH='/usr/local/shell_studying/',執行cd test_shell時在當前目錄查找是否有該目錄,沒有則進入CDPATH定義的目錄中的test_shell目錄,如下:
[root@testserver ~]# CDPATH='/usr/local/shell_studying/'
[root@testserver ~]# cd test_shell
/usr/local/shell_studying/test_shell
[root@testserver test_shell]#
變數EUID:記錄當前用戶的UID。root用戶的UID為0
[root@testserver ~]# echo $EUID 0
變數FUNCNAME:在用戶函數體內部,記錄當前函數體的函數名。
示例:創建funcname.sh文件並執行。
[root@testserver shell_studing]# cat funcname.sh #!/bin/bash funcname(){ echo $FUNCNAME } funcname [root@testserver shell_studing]# chmod +x funcname.sh [root@testserver shell_studing]# ./funcname.sh funcname [root@testserver shell_studing]#
變數HISTCMD:記錄下一個命令在history命令中的編號。
示例:執行history命令後,最近1條命令的編號是1009,執行echo $HISTCMD命令的編號為1010,所以下一條命令的編號為1011。
[root@testserver shell_studing]# history .... 1008 2020-05-08 15:47:37 root ./funcname.sh 1009 2020-05-08 15:49:36 root history [root@testserver shell_studing]# echo $HISTCMD 1011
變數HISTFILE:記錄history命令記錄文件的位置。
[root@testserver ~]# echo $HISTFILE /root/.bash_history
變數HISTFILESIZE:設置HISTFILE文件記錄命令的行數。限制歷史命令記錄的行數。
[root@testserver ~]# echo $HISTFILESIZE 1000
變數HISTSIZE:命令緩衝區的大小。執行的命令,先記錄在命令緩衝區,在緩衝區滿或退出Shell時才將命令寫入$HISTFILE
[root@testserver ~]# echo $HISTSIZE 1000
變數HOSTNAME:展示主機名。
[root@testserver shell_studing]# echo $HOSTNAME testserver
變數HOSTTYPE:展示主機的架構。如i386、i686、x86_64等。
[root@testserver shell_studing]# echo $HOSTTYPE x86_64
變數MACHTYPE:主機類型的GNU標識。一般為「主機架構-公司-系統-gnu」
[root@testserver shell_studing]# echo $MACHTYPE x86_64-redhat-linux-gnu
變數LANG:設置當前系統的語言環境。
[root@testserver shell_studing]# echo $LANG en_US.UTF-8 [root@testserver shell_studing]# export LANG=zh_CN.UTF-8
變數PWD:記錄當前目錄。
[root@testserver shell_studing]# echo $PWD /usr/local/testuser/shell_studing
變數OLDPWD:記錄之前的目錄。
示例:當前目錄/usr/local/testuser/shell_studing,cd /root 切換路徑後,/root為當前目錄,則/usr/local/testuser/shell_studing為之前的目錄,即$OLDPWD
[root@testserver shell_studing]# echo $PWD /usr/local/testuser/shell_studing [root@testserver shell_studing]# cd /root [root@testserver ~]# echo $OLDPWD /usr/local/testuser/shell_studing [root@testserver ~]#
變數PATH:代表命令的搜索路徑。
[root@testserver ~]# echo $PATH /usr/local/module/maven-3.1.1/bin:/usr/local/jdk/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/usr/local/maven/apache-maven-3.3.9/bin:/root/bin #設置PATH變數,新增路徑/usr/local/testuser/至PATH
[root@testserver ~]# export PATH=/usr/local/testuser/:$PATH [root@testserver ~]# echo $PATH /usr/local/testuser/:/usr/local/module/maven-3.1.1/bin:/usr/local/jdk/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/usr/local/maven/apache-maven-3.3.9/bin:/root/bin [root@testserver ~]#
變數PS1:命令提示符。\u是用戶名,\h是主機名,\W是當前工作目錄,\$是UID的替換字元:如UID為0,則替換成#(root用戶),否則替換成$。
[root@testserver ~]# echo $PS1 [\u@\h \W]\$
其他變數:通過執行 man bash 查看man文件,在Shell Variable中查看(下圖截取部分命令)。

【學習參考文檔】
- 書籍:《Linux系統命令及Shell腳本實踐指南》 王軍 著;
- Shell教程|菜鳥教程://www.runoob.com/linux/linux-shell.html
【寫在末尾】文章如有錯誤之處,歡迎評論指正,非常感謝。
有興趣可關注同名微信公眾號「粒粒的測試筆記」,號內會分享各種測試相關知識,感謝關注。



