Bash脚本基础:环境变量定义与使用
腳本中會遇到很多使用環境變量的地方,這篇文章介紹一下BASH中使用的基礎知識。
環境變量的分類
環境變量有很多中分類,根據環境變量的定義方式可以分為自定義環境變量和系統環境變量。自定義環境變量為使用者自行定義的一些變量。
- 系統環境變量
系統自身的一些缺省環境變量,比如PATH等。比如在CentOS的Linux的root用戶下確認如下幾個環境變量的值
在macOS的liumiao用戶下確認同樣的環境變量的值,結果如下所示:
liumiaocn:~ liumiao$ echo $USER $PWD $LANG $SHELL liumiao /Users/liumiao /bin/bash liumiaocn:~ liumiao$- 自定義環境變量
變量名稱可以根據需要進行設定,使用export在當前進程生效。比如:
liumiaocn:~ liumiao$ export ENV_HOST_LIST="192.168.163.122" liumiaocn:~ liumiao$ echo $ENV_HOST_LIST 192.168.163.122 liumiaocn:~ liumiao$env命令:確認環境
無論是自定義環境變量還是系統環境變量,當前進程中生效的環境變量均可使用env進行確認
liumiaocn:~ liumiao$ env |egrep 'USER|PWD|LANG|SHELL' SHELL=/bin/bash OLDPWD=/Users/liumiao/VirtualBox VMs USER=liumiao PWD=/Users/liumiao liumiaocn:~ liumiao$自定義的環境變量,一旦expose之后也可以使用env進行確認
liumiaocn:~ liumiao$ export ENV_HOST_LIST="192.168.163.123" liumiaocn:~ liumiao$ echo $ENV_HOST_LIST 192.168.163.123 liumiaocn:~ liumiao$ env |grep ENV_HOST_LIST ENV_HOST_LIST=192.168.163.123 liumiaocn:~ liumiao$使用示例說明
如下腳本定義了一個環境變量,變量名為ENV_HOST_LIST,如果此環境變量沒有值的話,設定此環境變量的值并顯示。
liumiaocn:shell liumiao$ cat test_script.sh #!/bin/sh set -exif [ _"" = _"${ENV_HOST_LIST}" ]; thenexport ENV_HOST_LIST="192.168.16.121" fiecho "ENV_HOST_LIST: $ENV_HOST_LIST" liumiaocn:shell liumiao$如果在執行此腳本時,ENV_HOST_LIST已經有值,則只會顯示已有的值,執行結果如下所示:
liumiaocn:shell liumiao$ export ENV_HOST_LIST=192.168.163.124 liumiaocn:shell liumiao$ env |grep ENV_HOST_LIST ENV_HOST_LIST=192.168.163.124 liumiaocn:shell liumiao$ sh test_script.sh + '[' _ = _192.168.163.124 ']' + echo 'ENV_HOST_LIST: 192.168.163.124' ENV_HOST_LIST: 192.168.163.124 liumiaocn:shell liumiao$ echo $ENV_HOST_LIST 192.168.163.124 liumiaocn:shell liumiao$使用unset命令可以清除變量定義,使用之前清除。一旦unset,此變量使用env命令也無法搜索到,使用示例如下所示:
liumiaocn:shell liumiao$ echo $ENV_HOST_LIST 192.168.163.124 liumiaocn:shell liumiao$ env |grep ENV_HOST_LIST ENV_HOST_LIST=192.168.163.124 liumiaocn:shell liumiao$ unset ENV_HOST_LIST liumiaocn:shell liumiao$ echo $ENV_HOST_LISTliumiaocn:shell liumiao$ env |grep ENV_HOST_LIST liumiaocn:shell liumiao$在這種情況之下,再次執行上述腳本,可以看到如下結果
liumiaocn:shell liumiao$ sh test_script.sh + '[' _ = _ ']' + export ENV_HOST_LIST=192.168.16.121 + ENV_HOST_LIST=192.168.16.121 + echo 'ENV_HOST_LIST: 192.168.16.121' ENV_HOST_LIST: 192.168.16.121 liumiaocn:shell liumiao$可以看到在此腳本中ENV_HOST_LIST被設定為192.168.16.121,并進行了expose操作。其退出之后,當前進程是否還有其設定的值呢,當然沒有了。
liumiaocn:shell liumiao$ env |grep ENV_HOST_LIST liumiaocn:shell liumiao$ echo $ENV_HOST_LISTliumiaocn:shell liumiao$那export的意義在哪里呢,實際上腳本過于簡單,環境變量可以作為全局的傳值方法之一,如果export之后還是啟動了其他腳本和進程,就可以使用此環境變量了。
export命令:設置環境變量
變量通過=進行賦值,使用export將其設置成環境變量,使用和不使用有什么區別呢?簡單來說定義了一個變量之后,在當前進程中是可以使用的,但是如果不對此變量進行export操作,其當前進程中調用的其他進程或者腳本是無法使用此變量的。從如下使用示例中可以看到,如果設定了一個變量并不進行export操作,雖然在當前進程中可以使用echo確認此變量的值,但是env命令中并不存在此變量的信息。
liumiaocn:shell liumiao$ unset ENV_HOST_LIST liumiaocn:shell liumiao$ ENV_HOST_LIST=192.168.161.151 liumiaocn:shell liumiao$ echo $ENV_HOST_LIST 192.168.161.151 liumiaocn:shell liumiao$ env |grep ENV_HOST_LIST liumiaocn:shell liumiao$結合上述示例進行說明也可以看到,在腳本中也沒有讀取到此變量的內容
liumiaocn:shell liumiao$ sh test_script.sh + '[' _ = _ ']' + export ENV_HOST_LIST=192.168.16.121 + ENV_HOST_LIST=192.168.16.121 + echo 'ENV_HOST_LIST: 192.168.16.121' ENV_HOST_LIST: 192.168.16.121 liumiaocn:shell liumiao$定義小技巧
上述的if語句,如果使用腳本中定義的一個小的技巧,可以一行實現,具體示例如下所示:
liumiaocn:shell liumiao$ cat test_script.sh #!/bin/sh set -exexport ENV_HOST_LIST=${ENV_HOST_LIST:-192.168.163.131} echo "ENV_HOST_LIST: $ENV_HOST_LIST" liumiaocn:shell liumiao$執行結果如下:
liumiaocn:shell liumiao$ unset ENV_HOST_LIST liumiaocn:shell liumiao$ sh test_script.sh + export ENV_HOST_LIST=192.168.163.131 + ENV_HOST_LIST=192.168.163.131 + echo 'ENV_HOST_LIST: 192.168.163.131' ENV_HOST_LIST: 192.168.163.131 liumiaocn:shell liumiao$ export ENV_HOST_LIST=192.168.163.141 liumiaocn:shell liumiao$ sh test_script.sh + export ENV_HOST_LIST=192.168.163.141 + ENV_HOST_LIST=192.168.163.141 + echo 'ENV_HOST_LIST: 192.168.163.141' ENV_HOST_LIST: 192.168.163.141 liumiaocn:shell liumiao$總結
以上是生活随笔為你收集整理的Bash脚本基础:环境变量定义与使用的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 网易企业邮箱如何设置反垃圾规则?【网易企
- 下一篇: 基于Qsys的DDR2内存驱动