快速入門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{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的傳入參數的值。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章