>[success] # 變量作用域
~~~
1.跟其他編程語言一樣變量也存在作用域
2.Shell 變量的作用域可以分為三種:
2.1.有的變量只能在函數內部使用,這叫做局部變量(local variable);
2.2.有的變量可以在當前 Shell 進程中使用,這叫做全局變量(global variable);
2.3.而有的變量還可以在子進程中使用,這叫做環境變量(environment variable)。
~~~
>[danger] ##### 局部變量
~~~
要想變量的作用域僅限于函數內部,可以在定義時加上local命令,此時該變量就成了局部變量。請看下面的代碼:
#!/bin/bash
#定義函數
function func(){
local a=99
}
#調用函數
func
#輸出函數內部的變量
echo $a
輸出結果為空,表明變量 a 在函數外部無效,是一個局部變量。
~~~
>[danger] ##### Shell 全局變量
~~~
1.在 Shell 中定義的變量,默認就是全局變量。
2.開一個 Shell 窗口,定義一個變量 a 并賦值為 99,然后打印,這時在同一個 Shell 窗口中是可正確打印變量
a 的值的。然后再打開一個新的 Shell 窗口,同樣打印變量 a 的值,但結果卻為空,這說明全局變量 a 僅僅在定義它
的第一個 Shell 進程中有效,對新的 Shell 進程沒有影響
3.打開一個 Shell 窗口就創建了一個 Shell 進程,打開多個 Shell 窗口就創建了多個 Shell 進程,每個 Shell 進程都
是獨立的,擁有不同的進程 ID
~~~
>[danger] ##### Shell 環境變量
~~~
1.自定義環境變量,'export 變量名=變量值',使用export命令將全局變量導出,那么它就在所有的子進程中也有效了,
環境變量被創建時所處的 Shell 進程稱為父進程,如果在父進程中再創建一個新的進程來執行 Shell 命令,那么這個
新的進程被稱作 Shell 子進程。當 Shell 子進程產生時,它會繼承父進程的環境變量為自己所用,所以說環境變量可
從父進程傳給子進程
2.創建 Shell 子進程最簡單的方式是運行 bash 命令
3.注意這里說的是子進程,而不是像'Shell 全局變量' 中說的那樣新開窗口,而是使用base命令
4.通過 export 導出的環境變量只對當前 Shell 進程以及所有的子進程有效,如果最頂層的父進程被關閉了,
那么環境變量也就隨之消失了,其它的進程也就無法使用了,所以說環境變量也是臨時的
~~~
~~~
[c.biancheng.net]$ a=22 #定義一個全局變量
[c.biancheng.net]$ echo $a #在當前Shell中輸出a,成功
22
[c.biancheng.net]$ bash #進入Shell子進程
[c.biancheng.net]$ echo $a #在子進程中輸出a,失敗
[c.biancheng.net]$ exit #退出Shell子進程,返回上一級Shell
exit
[c.biancheng.net]$ export a #將a導出為環境變量
[c.biancheng.net]$ bash #重新進入Shell子進程
[c.biancheng.net]$ echo $a #在子進程中再次輸出a,成功
22
[c.biancheng.net]$ exit #退出Shell子進程
exit
[c.biancheng.net]$ exit #退出父進程,結束整個Shell會話
~~~
>[danger] ##### 查看環境變量
~~~
1.'env'
2.輸出常見的環境變量
echo $HOSTNAME
echo $SHELL
echo $HISTSIZE
echo $SSH_CLIENT
echo $USER
~~~
* 常用環境變量

| 變量名 | 含義 | 示例 |
| --- | --- | --- |
| HOSTNAME | 主機名 | HOSTNAME=localhost |
| SHELL | 當前的shell | SHELL=/bin/bash |
| HISTSIZE | 歷史命令條數 | HISTSIZE=1000 |
| SSH\_CLIENT | 當前操作環境如果是用SSH連接的話,這里會記錄客戶端IP | SSH\_CLIENT=192.168.1.100 57596 22 |
| USER | 當前登錄的用戶 | USER=root |
>[info] ## 參考
[# Shell變量的作用域:全局變量、環境變量和局部變量](http://www.beylze.cn/shell/703.html)
- 安裝-VMware 虛擬機
- 遠程連接
- Windows -- wsl
- Linux -- 認識 Linux 和操作系統
- Linux -- Linux 和 windows 對比
- Linux -- 命令提示符
- Linux -- 文件目錄
- Linux -- 文件類型
- Linux -- 絕對和相對路徑
- Linux -- 常用快捷鍵
- Linux -- 三種幫助命令
- 幫助命令 -- man
- 幫助命令 -- help
- 幫助命令 -- info
- Linux -- 指令
- alias -- 設置別名
- history -- 查看歷史命令
- cd -- 更改目錄(切換文件夾)
- pwd -- 打印目錄
- ls -- 列出文件內容
- mkdir -- 創建文件夾
- rmdir -- 刪除一個空的目錄
- touch -- 創建普通文件/修改時間
- cp -- 復制粘貼
- mv -- 移動和重名
- rm -- 刪除
- cat/tac -- 查看純文本文件
- more/less -- 分頁讀取信息
- head -- 從文本開頭查看
- tail -- 從文本結尾查看
- cut -- 提取片段
- sort -- 排序
- uniq -- 去重
- wc -- 統計文件的行數、單詞、字節數
- tr -- 替換、縮減或刪除字符
- find -- 文件查找
- grep -- 文件當中匹配字符
- 管道 -- |
- locate -- 第三方文件查找
- whereis -- 查找二進制/源代碼文件 路徑
- which -- 查找環境變量
- 壓縮和解壓
- ln -- 鏈接
- wget -- 下載指定的url資源
- 重定向 -- << /< />/> >
- 邏輯控制 -- &&
- echo -- 輸出指定內容
- date/cal -- 查看日期和日歷
- Linux -- 進程管理
- Linux-- ps 指令
- vi/vim - 文本編輯器
- 更多
- Linux-- 開關機命令
- Liunx -- 退出登錄
- Linux-- 查看登錄用戶信息
- Linux -- 環境變量
- Linux -- 用戶
- Linux -- 文件管理
- 文件權限設置 -- chmod
- 更改文件的擁有者 -- chown
- 默認權限 -- umask
- Linux -- 用戶
- 新建/刪除用戶 -- useradd/userdel
- 修改用戶屬性 -- usermod/chage
- 新建/刪除用戶組 -- groupadd/groupdel
- 用戶切換 -- su/sudo
- 用戶/用戶組的配置文件
- 用戶家目錄被刪除解決
- last、 lastlog命令查看用戶詳細的登錄信息
- Linux -- shell
- Linux -- 管道符號
- shell -- 執行
- shell -- 變量
- shell -- 字符串
- shell -- 數組
- Shell -- declare 設置變量屬性
- shell -- 數學計算
- shell -- 變量作用域
- shell -- 位置參數變量
- shell -- read
- shell - if 語句
- shell -- test
- shell -- case
- Linux -- 循環
- Linux -- 軟件包管理