環境變數 環境變數:每個Shell打開都可以獲得到的變數。 我們知道通過 的方式打開可以讓子進程讀取父進程的變數的值,那怎麼樣才能讓每一個進程都能讀取到變數的值呢? 在這呢,系統有一些預設的配置文件,把變數嵌入到配置文件就可以了。 那麼,系統已經自帶了哪些環境變數呢?我們可以通過 這個命令,查看系統 ...
環境變數
環境變數:每個Shell打開都可以獲得到的變數。
我們知道通過export
的方式打開可以讓子進程讀取父進程的變數的值,那怎麼樣才能讓每一個進程都能讀取到變數的值呢?
在這呢,系統有一些預設的配置文件,把變數嵌入到配置文件就可以了。
那麼,系統已經自帶了哪些環境變數呢?我們可以通過env
這個命令,查看系統中內置的環節變數。
[root@lincoding ~]# env
HOSTNAME=lincoding
SHELL=/bin/bash
……
SSH_TTY=/dev/pts/0
USER=root
……
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin
LANG=en_US.UTF-8
SHLVL=1
HOME=/root
LOGNAME=root
……
由於環節變數太多了,省略一部分。以上都是系統的環境變數,新的終端打開,以上的變數都會被初始化完成。
可以通過變數的引用查看單獨某個的環境變數的值,環境變數的都是大寫為主。
[root@lincoding ~]# echo $PATH
/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin
[root@lincoding ~]# echo $SHELL
/bin/bash
PATH
系統環境變數是定義了命令的搜索路徑,SHELL
是定義了系統預設的Shell是bash。
PATH環境變數
PATH
系統環境變數是定義了命令的搜索路徑,意思就是我們輸入的Linux命令,都會在PATH
變數定義的路徑里尋找,若存在則執行命令,若不存在則報錯命令不存在。
其實所謂的不存在,就是在搜索路徑里沒有找到對應的命令。
[root@lincoding ~]# echo $PATH
/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin
假設要增加自定義的搜索路徑,則可以通過下麵的方式
[root@lincoding ~]# PATH=$PATH:/home
[root@lincoding ~]# echo $PATH
/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin:/home
不過上面的方式,新增的自定義路徑是PATH變數,只在當前終端作用範圍生效,其他進程是不生效的。
預定義變數
預定義變數有$?、$$、$0三個
- $?表示的是上一條命令執行的狀態碼,0代表正常,非0代表出錯
[root@lincoding home]# cd /home/
[root@lincoding home]# echo $?
0
[root@lincoding home]# cd /file
-bash: cd: /file: No such file or directory
[root@lincoding home]# echo $?
1
- $$查看當前進程的pid
[root@lincoding home]# echo $$
18136
- $0表示當前進程的名稱
[root@lincoding home]# echo $0
-bash
Shell腳本里使用上述三個預定義變數,腳本如下:
#!/bin/bash
# PID
echo $$
echo $0
執行效果:
[root@lincoding home]# ./test.sh
702
./test.sh
[root@lincoding home]# . test.sh
18136
-bash
[root@lincoding home]# source test.sh
18136
-bash
根據不同的執行方式,那麼$0產生的名稱也不同。
位置參數
位置參數用於讀取執行Shell腳本時傳入的參數的值,形式如下:
- $1 參數一
- $2 參數二
- $3 參數三
以此類推,當參數10以上的時候,需要註意一下, 需要用${10}、${11}方式。
舉個例子,如下Shell腳本:
#!/bin/bash
# $1 $2 $3 ... $9 ${10}
echo $1
echo $2
echo $3
執行結果:
[root@lincoding home]# ./test.sh a b c
a
b
c
這裡介紹一下獲取傳入Shell腳本參數的總個數可以用$#
,如下例子:
#!/bin/bash
echo $#
執行結果:
[root@lincoding home]# ./test.sh
0
[root@lincoding home]# ./test.sh a
1
[root@lincoding home]# ./test.sh a b
2
[root@lincoding home]# ./test.sh a 123 b
3
小結
本節主要介紹了環境變數的特殊性,PATH
環境變數定義的就是命令的搜索路徑,若想知道其他環境變數,可以使用env
命令查看。
預定義變數是系統已經預定義好的變數,分別是$?、$$、$0。並且還可以通過位置變數$1
$2
$3
... 來獲取Shell的傳入參數的值。