變量簡介
變量的賦值方式:先寫變量名稱,然後“=”,最後是值,中間無任何空格
變量類型
變量可分爲兩類:環境變量(全局變量)和普通變量(局部變量)
環境變量
一般指用export內置命令導出的變量,用於定義shell的運行環境,保證shell命令的正確執行
shell通過環境變量來確定登錄用戶名、命令路徑、終端類型、登錄目錄等
按照系統規範,環境變量的名字均採用大寫的形式
查看設置的變量:set、env
set命令輸出所有的變量,包括全局變量和局部變量;
set -o命令只顯示bash shell的所有參數配置信息
env命令只顯示全局變量
自定義環境變量
1、設置環境變量
命令格式
1)export 變量名 =value
2)變量名 =value ;export 變量名
3)declare –x 變量名 =value
例子:
export NAME=wangxian NAME=wangxian ;export NAME declare –x NAME=oldboy
[
root@wangxian ~]# tail -1 /etc/profile export WANG='xianwang' #添加自定義變量 [root@wangxian ~]# source /etc/profile [root@wangxian ~]# echo $WANG #打印變量值 xianwang [root@wangxian ~]# env|grep WANG #查看定義結果 WANG=xianwang
(1)用戶的環境變量配置
[root@wangxian ~]# ls /root/.bashrc #推薦在此文件中優先設置 /root/.bashrc [root@wangxian ~]# ls /root/.bash_profile /root/.bash_profile
(2)全局環境變量的配置
/etc/profile /etc/bashrc #推薦在此文件中優先設置 /etc/profile.d/
2、設置登錄提示的兩種方式
1)/etc/motd裏增加提示字符
2)在/etc/profile.d/下面增加腳本
顯示與取消環境變量
通過echo或printf打印環境變量
用env(printenv)顯示默認的環境變量
用unset消除本地變量和環境變量
環境變量知識小結:
變量名通常要大寫;
變量可以在自身的shell及子shell中使用
常用export來定義環境變量
執行env默認可以顯示所有的環境變量名及對應的值
輸出時用“$變量名”,取消用“unset變量名”
書寫crond定時任務要注意,腳本要用到的環境變量最好先在所執行的shell腳本中重新定義;
若希望環境變量永久生效,可將其放在用戶環境變量文件或全局環境變量文件裏
普通變量
定義本地變量
本地變量在用戶當前shell生存期的腳本中使用
1、普通變量定義
變量名=value
變量名=’value’
變量名=”value”
2、在shell中定義變量名及變量內容賦值的要求
變量名一般由字母、數字、下劃線組成
3、示例:
[root@wangxian ~]# a=192.168.1.2 [root@wangxian ~]# b='192.168.1.2' [root@wangxian ~]# c="192.168.1.2" [root@wangxian ~]# echo "a=$a" a=192.168.1.2 [root@wangxian ~]# echo "b=$b" b=192.168.1.2 [root@wangxian ~]# echo "c=${c}" c=192.168.1.2
4、變量定義的基本技巧總結:
1)不加引號,直接定義變量內容
2)單引號,輸出變量內容時單引號裏是什麼就輸出什麼,即使內容中有變量和命令也會把它們原樣輸出
3)雙引號,輸出變量內容時引號的變量及命令會經過解析後再輸出內容。
經驗:數字內容的變量定義可以不加引號,其他沒有特別要求的字符串等定義最好都加上雙引號,如果真的需要原樣輸出就加單引號,定義變量加雙引號是最常見的使用場景。
5、把一個命令的結果作爲變量的內容賦值的方法
變量名=`ls`
變量名=$(ls)
PS:當變量後面連接有其他字符的時候,必須給變量加上大括號{}
例如:$wangxian_name就要改成${wangxian}_name
變量定義及變量輸出說明
單引號、雙引號、反引號與不加引號的知識說明
名稱 | 解釋 |
單引號 | 所見即所得,即輸出時會將單引號內的所有內容都原樣輸出,或者描述爲單引號裏面看到的是什麼就會輸出什麼;這稱爲強引用 |
雙引號 | 輸出雙引號內的所有內容;如果內容中有命令、變量、特殊字符等,會先把變量、命令、轉義字符解析出結果,然後再輸出最終內容,推薦使用,稱爲弱引用 |
無引號 | 賦值時,如果變量內容中有空格,則會造成賦值不完整。而在輸出內容時,會將含有空格的字符串視爲一個整體來輸出;如果內容中有命令、變量等,則會先把變量、命令解析出結果,然後輸出最終內容;如果字符串中帶有空格等特殊字符,則有可能無法完整的輸出,因此需要改加雙引號 |
反引號 | 一般用於引用命令,執行的時候命令會被執行,相當於$(),賦值和輸出都要用``將命令引起來 |
建議:
在腳本中定義普通字符串變量時,應儘量把變量的內容用雙引號括起來
單純數字的變量內容可以不加引號
希望變量的內容原樣輸出時需要加單引號
希望變量值引用命令並獲取命令的結果時就用反引號或$()
變量定義技巧總結
可以多學習操作系統自帶的/etc/init.d/functions函數庫腳本的定義思路
1)變量名及變量內容定義小結
1、變量名只能爲字母、數字或下劃線,只能以字母或下劃線開頭
2、變量名的定義要有一定的規範,並且要見名知意
3、一般的變量定義、賦值常用雙引號;簡單連續的字符串可以不加引號;希望原樣輸出時使用單引號
4、希望變量的內容是命令的解析結果時,要用反引號``,或者用$()
2)shell定義變量時使用“=”的知識
“a=1”裏等號是賦值的意思,比較變量是否相等時可以用“=”或“==”
3)打印輸出及使用變量的知識
打印輸出或使用變量時,變量名前要接$符號,變量名後緊接其他字符的時候要用{}將變量名單獨括起來。unset、export等不加$。
打印輸出或使用變量時,一般加雙引號或不加引號;如果是字符串變量,最好加雙引號;原樣輸出時加單引號。