Linux下的變量
Linux變量
Linux下的變量主要分為三種:本地變量、環(huán)境變量和位置變量
本地變量本地變量是用戶在當(dāng)前shell生命周期內(nèi)聲明的變量,隨著shell進(jìn)程的終止而銷毀。
環(huán)境變量適用于所有由登錄進(jìn)程產(chǎn)生的子進(jìn)程(父進(jìn)程的環(huán)境變量在子進(jìn)程中可用)。
Shell參數(shù)用于向shell腳本傳遞參數(shù),只讀。
本地變量
本地變量如同局部變量,只在當(dāng)前shell中起作用,不會(huì)影響其他shell中的變量。
-
變量賦值
使用variable=value賦值,變量賦值遵循從右到左的順序
$X=$Y Y=y $echo $X $y -
變量顯示
-
通過(guò)echo顯示某一變量
$echo $WEEK -
通過(guò)set顯示當(dāng)前SHELL的所有變量,包括內(nèi)置變量與用戶定義過(guò)得所有變量。
$set
-
-
變量調(diào)用
使用$符號(hào)進(jìn)行變量調(diào)用,若與其他字符相連則應(yīng)加上大括號(hào)。
$echo Today is ${WEEK}day -
刪除變量
使用unset命令刪除變量的賦值
$unset Z -
命令替換
在Bourne Shell中可以使變量在特定條件下執(zhí)行
${variable: -value} 在變量為空時(shí),使用默認(rèn)的value值。變量的值并沒(méi)有改變。
${variable:=value} 不但使用默認(rèn)值進(jìn)行替換,而且將默認(rèn)值賦給該變量。
${varibale:+value} 當(dāng)變量已賦值時(shí),則用默認(rèn)值進(jìn)行提換,如果為空則顯示空。
${variable:?message} 當(dāng)變量已賦值時(shí),則輸出值。未賦值則輸出message。$echo Hello $UNAME $Hello $echo Hello ${UNAME: -there} $Hello there $echo $UNAME $ $UNAME=hohn $echo Hello ${UNAME: -there} $Hello john -
特殊命令
-
readonly 變量名
使變量名變?yōu)橹蛔x。單獨(dú)運(yùn)行readonly顯示所有的制度變量。
-
export 變量名
export命令可以將本地變量聲明為環(huán)境變量,供子進(jìn)程使用。
-
Shell參數(shù)
-
位置參數(shù)
由系統(tǒng)提供的參數(shù)稱為位置參數(shù)。位置參數(shù)的值可以用$N得到,N是一個(gè)數(shù)字,如果為1,即$1.類似C語(yǔ)言中的數(shù)組,在shell解釋用戶的命 令時(shí),將把命令行的第一個(gè)字作為命令,而其他的字作為參數(shù)。當(dāng)命令對(duì)應(yīng)的可執(zhí)行文件為Shell程序時(shí),這些參數(shù)將作為位置變量傳送給該程序。第0號(hào)為程 序名字,從1開(kāi)始就表示傳遞給程序的參數(shù)。第一個(gè)參數(shù)記為$1,第二個(gè)為$2....第九個(gè)為$9。其中1到9是真正的參數(shù)名,"$"符只是用來(lái)標(biāo)識(shí)變量的替換
-
內(nèi)部參數(shù)
Shell內(nèi)存在著幾個(gè)內(nèi)部變量,代表著程序本身。
$# ----傳遞給程序的總的參數(shù)數(shù)目
$? ----上一個(gè)代碼或者shell程序在shell中退出的情況,如果正常退出則返回0,反之為非0值
$* ----傳遞給程序的所有參數(shù)組成的字符串
$- ----在Shell啟動(dòng)或使用set命令時(shí)提供選項(xiàng)
$? ----上一條命令執(zhí)行后返回的值
$$ ----當(dāng)前shell的進(jìn)程號(hào)
$! ----上一個(gè)子進(jìn)程的進(jìn)程號(hào)
$@ ----所有的參數(shù),每個(gè)都用雙括號(hào)括起
$n ----位置參數(shù)值,n表示位置
$0 ----當(dāng)前shell名
環(huán)境變量
-
變量賦值
-
Linux中包含環(huán)境變量配置文件的調(diào)用順序
系統(tǒng)啟動(dòng):
- etc/environment(該文件為整個(gè)系統(tǒng)的環(huán)境,在系統(tǒng)啟動(dòng)時(shí)載入)
用戶登錄(login shell):
- etc/profile (用戶登錄時(shí)讀取的環(huán)境設(shè)置,所有用戶的統(tǒng)一環(huán)境變量)
- ~/.bash_profile ~/.bash_login ~/.profile (在用戶登錄后,profile會(huì)依次在用戶目錄查找以上三個(gè)文件。profile會(huì)調(diào)用第一個(gè)找到的文件,在調(diào)用后返回。)
- ~/.bashrc etc/bashrc
(/.bash_profile會(huì)調(diào)用/.bashrc,而~/.bashrc一般會(huì)調(diào)用etc/bashrc)
打開(kāi)新的終端(non-login shell)
- ~/.bashrc (在每一次打開(kāi)新的終端窗口時(shí),都會(huì)被調(diào)用)
- etc/bashrc (由.bashrc調(diào)用)
-
環(huán)境變量的設(shè)置
-
在/etc/profile文件中添加環(huán)境變量
在登陸系統(tǒng)時(shí)讀取,針對(duì)所有用戶,永久有效
```Shell //添加CLASSPATH $ vi /etc/prfile //在文件中添加 export CLASSPATH=XXXXXXX //若需要立即生效 $ source /etc/profile ``` -
在~/.bash_profile中添加環(huán)境變量
在登錄系統(tǒng)時(shí)讀取,針對(duì)單一用戶,永久有效
-
在~/.bashrc中添加變量
在系統(tǒng)登錄和每次打開(kāi)Shell時(shí)讀取,針對(duì)單一用戶,永久有效
-
使用export命令定義變量
支隊(duì)當(dāng)前Shell臨時(shí)有效
-
-
-
變量顯示
-
通過(guò)echo顯示某一環(huán)境變量
$echo $PATH -
通過(guò)env活著printenv顯示當(dāng)前所有環(huán)境變量
$env
-
-
變量調(diào)用
使用$符號(hào)進(jìn)行變量調(diào)用,若與其他字符相連則應(yīng)加上大括號(hào)。
$echo $PATH -
變量刪除
可以使用unset刪除環(huán)境變量。
Shell關(guān)閉時(shí),在Shell中export設(shè)置的環(huán)境變量會(huì)銷毀。 -
常用變量
PATH 決定了shell將到哪些目錄中尋找命令或程序
HOME 當(dāng)前用戶主目錄
HISTSIZE 歷史記錄數(shù)
LOGNAME 當(dāng)前用戶的登錄名
HOSTNAME 指主機(jī)的名稱
SHELL 當(dāng)前用戶Shell類型
LANGUGE 語(yǔ)言相關(guān)的環(huán)境變量,多語(yǔ)言可以修改此環(huán)境變量
MAIL 當(dāng)前用戶的郵件存放目錄
PS1 基本提示符,對(duì)于root用戶是#,對(duì)于普通用戶是$