官术网_书友最值得收藏!

1.2.5 Shell變量

在編程語言中,變量是一種存儲(chǔ)數(shù)據(jù)的容器。它可以用來保存各種類型的數(shù)據(jù),如數(shù)字、字符串、布爾值等。在Shell中,變量也是一種存儲(chǔ)數(shù)據(jù)的容器,它有著與其他編程語言中的變量類似的基本概念,主要包括以下內(nèi)容。

(1)變量名。變量名是變量的唯一標(biāo)識(shí),通常是一個(gè)字母或下畫線開頭的字符序列,如name、age、_score等。在Shell中,變量名只能由字母、數(shù)字和下畫線組成,且不能以數(shù)字開頭。變量名區(qū)分字母大小寫,如NAME和name是不同的變量,環(huán)境變量建議使用全大寫字母命名。

(2)變量類型。在Shell中,變量可以存儲(chǔ)任何類型的數(shù)據(jù),如整數(shù)、浮點(diǎn)數(shù)、字符串、布爾值等。變量的類型是由它所存儲(chǔ)的數(shù)據(jù)決定的。

(3)變量值。變量值是指變量當(dāng)前存儲(chǔ)的數(shù)據(jù)。在Shell中,變量值可以通過賦值語句來修改。例如,在Bash中,可以使用a=10語句將變量a的值設(shè)為10。

V1-5 Shell變量

(4)變量作用域。變量作用域是指變量的有效范圍。在Shell中,變量可以被定義為全局變量或局部變量。全局變量是指在整個(gè)Shell會(huì)話中都有效的變量。它們可以在任何地方被訪問和修改,用戶可以使用export命令將變量定義為全局變量。局部變量是指僅在特定的代碼塊或函數(shù)中有效的變量,它們只能在定義它們的代碼塊或函數(shù)中被訪問和修改。

(5)定義和調(diào)用變量。在定義變量時(shí),變量名和變量值之間需要使用等號(hào)“=”連接,變量名與等號(hào)之間不能有空格。在調(diào)用變量時(shí),變量名需要使用$符號(hào)引用。

Shell中主要的變量類型如表1-6所示。

表1-6 Shell中主要的變量類型

1. 定義和調(diào)用變量

在Shell中,可以使用賦值語句來定義變量。

賦值語句的格式如下。


varname=varvalue

其中,varname表示變量名;varvalue表示變量值。

下面是在Shell中定義變量的幾個(gè)示例。


# 定義字符串變量 
name="John Smith" 
# 定義數(shù)值變量 
age=30 
# 定義數(shù)組變量 
fruits=("apple" "banana" "orange") 
# 定義浮點(diǎn)數(shù)變量 
HEIGHT=1.75 
# 定義布爾值變量 
IS_ADMIN=true

一些特殊的變量,如$0、$1等,是由Shell自動(dòng)賦值的,用于存儲(chǔ)特定的信息。例如,$0變量存儲(chǔ)的是腳本的文件名,$1變量存儲(chǔ)的是腳本的第一個(gè)參數(shù)。

在Shell中,要訪問變量的值,可以使用$varname的形式,即在變量名前面加上符號(hào)“$”。例如:


# 定義字符串變量
NAME="John Smith"
# 訪問變量的值
echo "Name is $NAME"
# 輸出:Name is John Smith

如果變量名中包含其他字符和特殊字符,或者變量名和其他文本混合在一起,則需要使用花括號(hào)“{}”來指定變量名。例如:


# 定義字符串變量
NAME="John"
# 訪問變量的值
echo "Name is ${NAME}_Smith"
# 輸出:Name is John_Smith

如果不使用花括號(hào),則等號(hào)右邊的字符會(huì)被當(dāng)作變量的一部分,從而導(dǎo)致錯(cuò)誤。例如:


# 定義字符串變量
name="John"
# 使用變量
echo "Hello, $name_Doe!"
# 輸出:
Hello, !

在這種情況下,變量名后面的_Doe被當(dāng)作變量的一部分,因此會(huì)返回空字符串。因此,在使用變量時(shí),如果變量名后面跟有其他字符或者變量名組成的字符串,則通常需要使用花括號(hào)來指明變量名的邊界。

此外,在使用變量的特殊語法時(shí),也需要使用花括號(hào)。例如,在使用${var:pos}和${var:pos:len}的形式訪問變量值的子字符串時(shí),需要使用花括號(hào)。其中,var是變量的名稱;pos是起始位置的偏移量,表示從變量值的第pos個(gè)字符開始,返回變量值的子字符串;len是子字符串的長度,表示從變量值的第pos個(gè)字符開始,返回長度為len的子字符串。例如:


# 定義字符串變量
string="abcdef"
# 使用變量
echo "${string:1}"
echo "${string:2:3}"
# 輸出:
bcdef
cde
# 定義字符串變量
name="John"
# 調(diào)用變量,從字符串變量name的第二個(gè)字符(從0開始計(jì)數(shù))開始,截取到字符串的末尾
echo "${name:1}"
輸出:
ohn

# 定義字符串變量
name="John"
# 調(diào)用變量,從字符串變量name的第二個(gè)字符(從0開始計(jì)數(shù))開始截取,截取長度為2
echo "${name:1:2}"
# 輸出:
oh

注意,如果pos或len超出了變量值的長度范圍,則將返回空字符串。

這些特殊的語法可以方便地對(duì)變量的值進(jìn)行操作和提取,使用這些語法截取變量值的一部分,或者獲取變量值的長度等操作,可以提高腳本的靈活性和可讀性。

數(shù)組變量是一種變量類型,可以存儲(chǔ)多個(gè)值。在大多數(shù)Shell中,數(shù)組是用一個(gè)變量名加圓括號(hào)的形式來表示的。例如:


array=(1 2 3 4 5)

這樣,數(shù)組array就被定義為包含5個(gè)元素的數(shù)組,每個(gè)元素可以是一個(gè)字符串或數(shù)字。

要訪問數(shù)組的元素,可以使用${var[index]}的形式。其中,var表示數(shù)組的名稱;index表示要訪問的元素的索引,索引從0開始。例如:


# 定義數(shù)組變量
fruits=("apple" "banana" "orange")
# 使用變量
echo "I like ${fruits[0]} and ${fruits[1]}"
# 輸出:
I like apple and banana

要獲取數(shù)組的所有元素,可以使用*或@符號(hào):


echo ${array[*]}
1 2 3 4 5
echo ${array[@]}
1 2 3 4 5

這兩種符號(hào)的區(qū)別在于,*符號(hào)會(huì)將所有元素看作一個(gè)單獨(dú)的字符串,而@符號(hào)會(huì)將每個(gè)元素看作單獨(dú)的字符串。

注意:在使用變量時(shí),如果變量名被包含在雙引號(hào)中,則變量名會(huì)被替換為變量的值;如果變量名被包含在單引號(hào)中,則變量名不會(huì)被替換。

2. 預(yù)設(shè)位置參數(shù)變量

在Shell中,有許多系統(tǒng)預(yù)設(shè)變量,可以方便地用于訪問系統(tǒng)信息和執(zhí)行狀態(tài)。其中,位置參數(shù)變量主要用來向腳本中傳遞參數(shù)或數(shù)據(jù),其變量名不能自定義,變量作用也是固定的。常見的系統(tǒng)預(yù)設(shè)位置參數(shù)變量如表1-7所示。

表1-7 常見的系統(tǒng)預(yù)設(shè)位置參數(shù)變量

位置參數(shù)變量主要用于獲取腳本的輸入?yún)?shù),并根據(jù)這些參數(shù)執(zhí)行相應(yīng)的操作。

3. 查看環(huán)境變量

在Linux操作系統(tǒng)中,環(huán)境變量是一種特殊的變量,它們用于存儲(chǔ)系統(tǒng)的配置信息。環(huán)境變量是系統(tǒng)級(jí)別的變量,它們可以在整個(gè)系統(tǒng)中使用,在用戶的會(huì)話中也可以使用。環(huán)境變量通常用于存儲(chǔ)系統(tǒng)路徑、可執(zhí)行文件的名稱、用戶名等信息。系統(tǒng)預(yù)設(shè)環(huán)境變量的命名規(guī)則通常是采用全大寫字母。常見的系統(tǒng)預(yù)設(shè)環(huán)境變量如表1-8所示。

表1-8 常見的系統(tǒng)預(yù)設(shè)環(huán)境變量

在Linux操作系統(tǒng)中,可以使用以下方法查看環(huán)境變量。

(1)使用printenv命令查看系統(tǒng)中所有的環(huán)境變量。例如:


[opencloud@server ~]$ printenv

(2)使用echo命令查看某個(gè)特定的環(huán)境變量的值。例如:


# 查看HOME環(huán)境變量的值
[opencloud@server ~]$ echo "$HOME"
/home/opencloud
# 查看LANG環(huán)境變量的值
[opencloud@server ~]$ echo "$LANG"
en_US.UTF-8

(3)使用env命令查看當(dāng)前進(jìn)程的環(huán)境變量。例如:


[opencloud@server ~]$ env

(4)使用set命令查看當(dāng)前Shell的所有變量,包括環(huán)境變量和Shell變量。例如:


[opencloud@server ~]$ set

(5)使用cat /proc/PID/environ命令查看某個(gè)進(jìn)程的環(huán)境變量。例如:


# 查看進(jìn)程9750的環(huán)境變量
[opencloud@server ~]$ cat /proc/9750/environ

4. 設(shè)置環(huán)境變量

在Shell中,export命令用于將變量設(shè)置為環(huán)境變量,設(shè)置的環(huán)境變量可以在整個(gè)系統(tǒng)中使用,在用戶的會(huì)話中也可以使用。

export命令的基本語法如下。


export [變量名]=[變量值]

使用export命令設(shè)置環(huán)境變量及其驗(yàn)證方法如下。

(1)使用等號(hào)賦值。例如:


[opencloud@server ~]$ export NAME="John"
[opencloud@server ~]$ export USERNAME="Tom"
[opencloud@server ~]$ export MYHOME="/home/john"

注意:在Shell中,環(huán)境變量通常使用大寫字母。

(2)使用echo命令查看環(huán)境變量的值。例如:


[opencloud@server ~]$ echo $NAME
John
[opencloud@server ~]$ echo $USERNAME
Tom
[opencloud@server ~]$ echo $MYHOME
/home/john

(3)使用環(huán)境變量的當(dāng)前值。例如:


[opencloud@server ~]$ echo $PATH
/home/ opencloud/.local/bin:/home/ opencloud /bin:/usr/bin:/bin:/usr/sbin:/sbin:
/usr/local/openssh/bin:/usr/local/sbin
[opencloud@server ~]$ export PATH=$PATH:/usr/local/bin
[opencloud@server ~]$ echo $PATH # 查看PATH環(huán)境變量的輸出結(jié)果
/home/ opencloud/.local/bin:/home/ opencloud /bin:/usr/bin:/bin:/usr/sbin:/sbin:
/usr/local/openssh/bin:/usr/local/sbin:/usr/local/bin
# export命令用于將 /usr/local/bin目錄添加到系統(tǒng)路徑中

export命令設(shè)置的環(huán)境變量只對(duì)當(dāng)前Shell有效,在關(guān)閉Shell后將失效。如果想永久設(shè)置環(huán)境變量,則建議在配置文件中進(jìn)行設(shè)置,如在/etc/profile或~/.bash_profile~/.bashrc等配置文件中進(jìn)行設(shè)置。

使用export命令在~/.bashrc文件中設(shè)置MYVAR環(huán)境變量:


[opencloud@server ~]$ echo "export MYVAR=123" >> ~/.bashrc

~表示當(dāng)前用戶的家目錄,export命令會(huì)將export MYVAR=123添加到~/.bashrc文件的末尾,從而設(shè)置MYVAR環(huán)境變量。

在修改環(huán)境變量所在配置文件之后,需要重新登錄系統(tǒng)或在命令行中使用source命令來使配置生效。source命令的主要作用是加載并執(zhí)行配置文件。使用source命令加載配置文件的好處是,可以在當(dāng)前Shell中使修改立即生效,而不需要重新打開一個(gè)新的Shell。

使用source命令,使~/.bashrc文件中設(shè)置的MYVAR環(huán)境變量生效:


[opencloud@server ~]$ source ~/.bashrc

查看MYVAR環(huán)境變量的值:


[opencloud@server ~]$ echo "$MYVAR"
# 輸出:123

此外,也可以使用source命令加載系統(tǒng)級(jí)別的配置文件。這樣,在/etc/bashrc文件中定義的環(huán)境變量、別名等就可以在當(dāng)前的Shell中使用了。


[opencloud@server ~]$ source /etc/bashrc

在Linux操作系統(tǒng)中,環(huán)境變量可以存儲(chǔ)在多個(gè)文件中。將環(huán)境變量分別存儲(chǔ)在這些文件中,可以靈活地管理系統(tǒng)級(jí)別和用戶級(jí)別的配置,確保在不同的登錄會(huì)話中和系統(tǒng)啟動(dòng)時(shí)正確加載環(huán)境變量。以下是常見的存儲(chǔ)環(huán)境變量的文件及其用途。

(1)系統(tǒng)級(jí)別文件

① /etc/environment:存儲(chǔ)適用于所有用戶的系統(tǒng)級(jí)別環(huán)境變量。

② /etc/profile:在系統(tǒng)啟動(dòng)時(shí)加載,適用于所有用戶,可以存儲(chǔ)全局的環(huán)境變量。

③ /etc/bashrc:系統(tǒng)級(jí)別的Bash配置文件,用于設(shè)置Bash的默認(rèn)行為。

(2)用戶級(jí)別文件

① ~/.bashrc:在用戶登錄系統(tǒng)時(shí)加載,用于存儲(chǔ)用戶特定的環(huán)境變量。

② ~/.bash_profile:在用戶登錄系統(tǒng)時(shí)加載,可用于存儲(chǔ)用戶特定的環(huán)境變量。

③ ~/.bash_login:類似于 ~/.bash_profile,在用戶登錄時(shí)加載,用于設(shè)置環(huán)境變量。

④ ~/.bash_logout:在用戶退出系統(tǒng)時(shí)加載,可用于清理或保存會(huì)話信息。

如果想修改系統(tǒng)級(jí)別的環(huán)境變量,則建議修改/etc/profile文件。如果想修改Bash的默認(rèn)行為,則建議修改/etc/bashrc文件。

主站蜘蛛池模板: 和平县| 高唐县| 清丰县| 金秀| 易门县| 北辰区| 萍乡市| 潜江市| 永登县| 芜湖市| 晴隆县| 雷波县| 庆元县| 华安县| 邵武市| 榆树市| 南溪县| 雅安市| 察隅县| 五峰| 府谷县| 临澧县| 荆门市| 垦利县| 茌平县| 木里| 长葛市| 涞水县| 西乡县| 五河县| 天津市| 克什克腾旗| 开鲁县| 酒泉市| 来宾市| 潍坊市| 佛坪县| 沽源县| 蒙阴县| 晴隆县| 高邮市|