變量類(lèi)型
運(yùn)行shell時(shí)艇抠,會(huì)同時(shí)存在三種變量:
- 局部變量
局部變量在腳本或命令中定義,僅在當(dāng)前shell實(shí)例中有效久锥,其他shell啟動(dòng)的程序不能訪問(wèn)局部變量家淤。 - 環(huán)境變量
所有的程序,包括shell啟動(dòng)的程序瑟由,都能訪問(wèn)環(huán)境變量絮重,有些程序需要環(huán)境變量來(lái)保證其正常運(yùn)行。必要的時(shí)候shell腳本也可以定義環(huán)境變量歹苦。 - shell變量
shell變量是由shell程序設(shè)置的特殊變量青伤。shell變量中有一部分是環(huán)境變量,有一部分是局部變量暂氯,這些變量保證了shell的正常運(yùn)行
定義變量
Shell 支持以下三種定義變量的方式:
variable=value
variable='value'
variable="value"
命名規(guī)則
Shell 變量的命名規(guī)范和大部分編程語(yǔ)言都一樣:
- 變量名由數(shù)字潮模、字母、下劃線組成痴施;
- 必須以字母或者下劃線開(kāi)頭擎厢;
- 不能使用 Shell 里的關(guān)鍵字(通過(guò) help 命令可以查看保留關(guān)鍵字)
使用變量
使用一個(gè)定義過(guò)的變量究流,只要在變量名前面加美元符號(hào)author
echo ${author}
建議使用第二種加中括號(hào)的
修改變量的值
已定義的變量动遭,可以被重新賦值芬探,如:
url="http://c.biancheng.net"
echo ${url}
url="http://c.biancheng.net/cpp/shell/"
echo ${url}
第二次對(duì)變量賦值時(shí)不能在變量名前加厘惦。
單引號(hào)和雙引號(hào)的區(qū)別
url="http://c.biancheng.net"
website1='C語(yǔ)言中文網(wǎng):${url}'
website2="C語(yǔ)言中文網(wǎng):${url}"
echo $website1
echo $website2
運(yùn)行結(jié)果:
C語(yǔ)言中文網(wǎng):${url}
C語(yǔ)言中文網(wǎng):http://c.biancheng.net
以單引號(hào)' '包圍變量的值時(shí)偷仿,單引號(hào)里面是什么就輸出什么,即使內(nèi)容中有變量和命令(命令需要反引起來(lái))也會(huì)把它們?cè)瓨虞敵?/p>
只讀變量
使用 readonly 命令可以將變量定義為只讀變量宵蕉,只讀變量的值不能被改變
例子:
myUrl="http://see.xidian.edu.cn/cpp/shell/"
readonly myUrl
myUrl="http://see.xidian.edu.cn/cpp/danpianji/"
刪除變量
使用 unset 命令可以刪除變量酝静。語(yǔ)法:
unset variable_name
變量被刪除后不能再次使用;unset 命令不能刪除只讀變量羡玛。
myUrl="http://see.xidian.edu.cn/cpp/u/xitong/"
unset myUrl
echo $myUrl
變量賦值
Shell 也支持將命令的執(zhí)行結(jié)果賦值給變量别智,常見(jiàn)的有以下兩種方式:
variable=command
variable=$(command)
建議使用第二種
特殊變量
$0 當(dāng)前腳本的文件名
$n 傳遞給腳本或函數(shù)的參數(shù)。n 是一個(gè)數(shù)字稼稿,表示第幾個(gè)參數(shù)薄榛。例如,第一個(gè)參數(shù)是$1让歼,第二個(gè)參數(shù)是$2敞恋。
$# 傳遞給腳本或函數(shù)的參數(shù)個(gè)數(shù)。
$* 傳遞給腳本或函數(shù)的所有參數(shù)谋右。
$@ 傳遞給腳本或函數(shù)的所有參數(shù)硬猫。被雙引號(hào)(" ")包含時(shí),與 $* 稍有不同倚评,下面將會(huì)講到浦徊。
$? 上個(gè)命令的退出狀態(tài)馏予,或函數(shù)的返回值天梧。
$$ 當(dāng)前Shell進(jìn)程ID。對(duì)于 Shell 腳本霞丧,就是這些腳本所在的進(jìn)程ID呢岗。
轉(zhuǎn)義字符
\\ 反斜杠
\a 警報(bào),響鈴
\b 退格(刪除鍵)
\f 換頁(yè)(FF)蛹尝,將當(dāng)前位置移到下頁(yè)開(kāi)頭
\n 換行
\r 回車(chē)
\t 水平制表符(tab鍵)
\v 垂直制表符
命令替換
命令替換是指Shell可以先執(zhí)行命令后豫,將輸出結(jié)果暫時(shí)保存,在適當(dāng)?shù)牡胤捷敵觥?br>
命令替換的語(yǔ)法:
command
例子:
DATE=date
echo "Date is USERS"
UP=date ; uptime
echo "Uptime is $UP"
變量替換
變量替換可以根據(jù)變量的狀態(tài)(是否為空突那、是否定義等)來(lái)改變它的值
{var:-word} 如果變量 var 為空或已被刪除(unset)挫酿,那么返回 word,但不改變 var 的值愕难。
{var:?message} 如果變量 var 為空或已被刪除(unset)葱弟,那么將消息 message 送到標(biāo)準(zhǔn)錯(cuò)誤輸出壹店,可以用來(lái)檢測(cè)變量 var 是否可以被正常賦值。
若此替換出現(xiàn)在Shell腳本中芝加,那么腳本將停止運(yùn)行硅卢。
${var:+word} 如果變量 var 被定義,那么返回 word藏杖,但不改變 var 的值将塑。