shell-變量

變量類(lèi)型

運(yùn)行shell時(shí)艇抠,會(huì)同時(shí)存在三種變量:

  1. 局部變量
    局部變量在腳本或命令中定義,僅在當(dāng)前shell實(shí)例中有效久锥,其他shell啟動(dòng)的程序不能訪問(wèn)局部變量家淤。
  2. 環(huán)境變量
    所有的程序,包括shell啟動(dòng)的程序瑟由,都能訪問(wèn)環(huán)境變量絮重,有些程序需要環(huán)境變量來(lái)保證其正常運(yùn)行。必要的時(shí)候shell腳本也可以定義環(huán)境變量歹苦。
  3. shell變量
    shell變量是由shell程序設(shè)置的特殊變量青伤。shell變量中有一部分是環(huán)境變量,有一部分是局部變量暂氯,這些變量保證了shell的正常運(yùn)行

定義變量

Shell 支持以下三種定義變量的方式:
variable=value
variable='value'
variable="value"

命名規(guī)則

Shell 變量的命名規(guī)范和大部分編程語(yǔ)言都一樣:

  1. 變量名由數(shù)字潮模、字母、下劃線組成痴施;
  2. 必須以字母或者下劃線開(kāi)頭擎厢;
  3. 不能使用 Shell 里的關(guān)鍵字(通過(guò) help 命令可以查看保留關(guān)鍵字)

使用變量

使用一個(gè)定義過(guò)的變量究流,只要在變量名前面加美元符號(hào)即可,如: author="嚴(yán)長(zhǎng)生" echoauthor
echo ${author}
建議使用第二種加中括號(hào)的

修改變量的值

已定義的變量动遭,可以被重新賦值芬探,如:

url="http://c.biancheng.net"
echo ${url}
url="http://c.biancheng.net/cpp/shell/"
echo ${url}

第二次對(duì)變量賦值時(shí)不能在變量名前加,只有在使用變量時(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 DATE" USERS=`who | wc -l` echo "Logged in user areUSERS"
UP=date ; uptime
echo "Uptime is $UP"

變量替換

變量替換可以根據(jù)變量的狀態(tài)(是否為空突那、是否定義等)來(lái)改變它的值

{var} 變量本來(lái)的值{var:-word} 如果變量 var 為空或已被刪除(unset)挫酿,那么返回 word,但不改變 var 的值愕难。
{var:=word} 如果變量 var 為空或已被刪除(unset)早龟,那么返回 word惫霸,并將 var 的值設(shè)置為 word。{var:?message} 如果變量 var 為空或已被刪除(unset)葱弟,那么將消息 message 送到標(biāo)準(zhǔn)錯(cuò)誤輸出壹店,可以用來(lái)檢測(cè)變量 var 是否可以被正常賦值。
若此替換出現(xiàn)在Shell腳本中芝加,那么腳本將停止運(yùn)行硅卢。
${var:+word} 如果變量 var 被定義,那么返回 word藏杖,但不改變 var 的值将塑。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市蝌麸,隨后出現(xiàn)的幾起案子抬旺,更是在濱河造成了極大的恐慌,老刑警劉巖祥楣,帶你破解...
    沈念sama閱讀 216,544評(píng)論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件开财,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡误褪,警方通過(guò)查閱死者的電腦和手機(jī)责鳍,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,430評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門(mén),熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)兽间,“玉大人历葛,你說(shuō)我怎么就攤上這事∴致裕” “怎么了恤溶?”我有些...
    開(kāi)封第一講書(shū)人閱讀 162,764評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)帜羊。 經(jīng)常有香客問(wèn)我咒程,道長(zhǎng),這世上最難降的妖魔是什么讼育? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,193評(píng)論 1 292
  • 正文 為了忘掉前任帐姻,我火速辦了婚禮,結(jié)果婚禮上奶段,老公的妹妹穿的比我還像新娘饥瓷。我一直安慰自己,他們只是感情好痹籍,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,216評(píng)論 6 388
  • 文/花漫 我一把揭開(kāi)白布呢铆。 她就那樣靜靜地躺著,像睡著了一般蹲缠。 火紅的嫁衣襯著肌膚如雪棺克。 梳的紋絲不亂的頭發(fā)上鳖宾,一...
    開(kāi)封第一講書(shū)人閱讀 51,182評(píng)論 1 299
  • 那天,我揣著相機(jī)與錄音逆航,去河邊找鬼鼎文。 笑死,一個(gè)胖子當(dāng)著我的面吹牛因俐,可吹牛的內(nèi)容都是我干的拇惋。 我是一名探鬼主播,決...
    沈念sama閱讀 40,063評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼抹剩,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼撑帖!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起澳眷,我...
    開(kāi)封第一講書(shū)人閱讀 38,917評(píng)論 0 274
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤胡嘿,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后钳踊,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體衷敌,經(jīng)...
    沈念sama閱讀 45,329評(píng)論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,543評(píng)論 2 332
  • 正文 我和宋清朗相戀三年拓瞪,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了缴罗。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,722評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡祭埂,死狀恐怖面氓,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情蛆橡,我是刑警寧澤舌界,帶...
    沈念sama閱讀 35,425評(píng)論 5 343
  • 正文 年R本政府宣布,位于F島的核電站泰演,受9級(jí)特大地震影響呻拌,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜粥血,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,019評(píng)論 3 326
  • 文/蒙蒙 一柏锄、第九天 我趴在偏房一處隱蔽的房頂上張望酿箭。 院中可真熱鬧复亏,春花似錦、人聲如沸缭嫡。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,671評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)妇蛀。三九已至耕突,卻和暖如春笤成,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背眷茁。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,825評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工炕泳, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人上祈。 一個(gè)月前我還...
    沈念sama閱讀 47,729評(píng)論 2 368
  • 正文 我出身青樓培遵,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親登刺。 傳聞我的和親對(duì)象是個(gè)殘疾皇子籽腕,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,614評(píng)論 2 353