shell變量段标、數(shù)組涯冠、注釋等基本操作

Shell 變量

定義變量時,變量名不加美元符號($逼庞,PHP語言中變量需要)蛇更,如:

your_name="runoob.com"

注意,變量名和等號之間不能有空格赛糟,這可能和你熟悉的所有編程語言都不一樣械荷。同時,變量名的命名須遵循如下規(guī)則:

命名只能使用英文字母虑灰,數(shù)字和下劃線,首個字符不能以數(shù)字開頭痹兜。

中間不能有空格穆咐,可以使用下劃線(_)。

不能使用標點符號字旭。

不能使用bash里的關(guān)鍵字(可用help命令查看保留關(guān)鍵字)对湃。

有效的 Shell 變量名示例如下:

RUNOOB

LD_LIBRARY_PATH

_var

var2

無效的變量命名:

?var=123user*name=runoob

除了顯式地直接賦值,還可以用語句給變量賦值遗淳,如:

for file in `ls /etc`或for file in $(ls /etc)

以上語句將 /etc 下目錄的文件名循環(huán)出來拍柒。

使用變量

使用一個定義過的變量,只要在變量名前面加美元符號即可屈暗,如:

your_name="qinjx"echo $your_name

echo ${your_name}

變量名外面的花括號是可選的拆讯,加不加都行,加花括號是為了幫助解釋器識別變量的邊界养叛,比如下面這種情況:

for skill in Ada Coffe Action Java; do? ? echo "I am good at ${skill}Script"done

如果不給skill變量加花括號种呐,寫成echo "I am good at $skillScript",解釋器就會把$skillScript當成一個變量(其值為空)弃甥,代碼執(zhí)行結(jié)果就不是我們期望的樣子了爽室。

推薦給所有變量加上花括號,這是個好的編程習慣淆攻。

已定義的變量阔墩,可以被重新定義,如:

your_name="tom"echo $your_name

your_name="alibaba"echo $your_name

這樣寫是合法的瓶珊,但注意啸箫,第二次賦值的時候不能寫$your_name="alibaba",使用變量的時候才加美元符($)艰毒。

只讀變量

使用 readonly 命令可以將變量定義為只讀變量筐高,只讀變量的值不能被改變。

下面的例子嘗試更改只讀變量,結(jié)果報錯:

#!/bin/bashmyUrl="http://www.google.com"readonly myUrl

myUrl="http://www.runoob.com"

運行腳本柑土,結(jié)果如下:

/bin/sh: NAME: This variable is read only.

刪除變量

使用 unset 命令可以刪除變量蜀肘。語法:

unset variable_name

變量被刪除后不能再次使用。unset 命令不能刪除只讀變量稽屏。

實例

#!/bin/shmyUrl="http://www.runoob.com"unset myUrl

echo $myUrl

以上實例執(zhí)行將沒有任何輸出扮宠。

變量類型

運行shell時,會同時存在三種變量:

1) 局部變量?局部變量在腳本或命令中定義狐榔,僅在當前shell實例中有效坛增,其他shell啟動的程序不能訪問局部變量。

2) 環(huán)境變量?所有的程序薄腻,包括shell啟動的程序收捣,都能訪問環(huán)境變量,有些程序需要環(huán)境變量來保證其正常運行庵楷。必要的時候shell腳本也可以定義環(huán)境變量罢艾。

3) shell變量?shell變量是由shell程序設(shè)置的特殊變量。shell變量中有一部分是環(huán)境變量尽纽,有一部分是局部變量咐蚯,這些變量保證了shell的正常運行

Shell 字符串

字符串是shell編程中最常用最有用的數(shù)據(jù)類型(除了數(shù)字和字符串,也沒啥其它類型好用了)弄贿,字符串可以用單引號春锋,也可以用雙引號,也可以不用引號差凹。單雙引號的區(qū)別跟PHP類似期奔。

單引號

str='this is a string'

單引號字符串的限制:

單引號里的任何字符都會原樣輸出,單引號字符串中的變量是無效的直奋;

單引號字串中不能出現(xiàn)單獨一個的單引號(對單引號使用轉(zhuǎn)義符后也不行)能庆,但可成對出現(xiàn),作為字符串拼接使用脚线。

雙引號

your_name='runoob'str="Hello, I know you are \"$your_name\"! \n"echo -e $str

輸出結(jié)果為:

Hello, I know you are "runoob"!

雙引號的優(yōu)點:

雙引號里可以有變量

雙引號里可以出現(xiàn)轉(zhuǎn)義字符

拼接字符串

your_name="runoob"# 使用雙引號拼接greeting="hello, "$your_name" !"greeting_1="hello, ${your_name} !"echo $greeting? $greeting_1# 使用單引號拼接greeting_2='hello, '$your_name' !'greeting_3='hello, ${your_name} !'echo $greeting_2? $greeting_3

輸出結(jié)果為:

hello, runoob ! hello, runoob !hello, runoob ! hello, ${your_name} !

獲取字符串長度

string="abcd"echo ${#string} #輸出 4

提取子字符串

以下實例從字符串第?2?個字符開始截取?4?個字符:

string="runoob is a great site"echo ${string:1:4} # 輸出 unoo

查找子字符串

查找字符?i?或?o?的位置(哪個字母先出現(xiàn)就計算哪個):

string="runoob is a great site"echo `expr index "$string" io`? # 輸出 4

注意:?以上腳本中?`?是反引號搁胆,而不是單引號?',不要看錯了哦邮绿。

Shell 數(shù)組

bash支持一維數(shù)組(不支持多維數(shù)組)渠旁,并且沒有限定數(shù)組的大小。

類似于 C 語言船逮,數(shù)組元素的下標由 0 開始編號顾腊。獲取數(shù)組中的元素要利用下標,下標可以是整數(shù)或算術(shù)表達式挖胃,其值應(yīng)大于或等于 0杂靶。

定義數(shù)組

在 Shell 中梆惯,用括號來表示數(shù)組,數(shù)組元素用"空格"符號分割開吗垮。定義數(shù)組的一般形式為:

數(shù)組名=(值1 值2 ... 值n)

例如:

array_name=(value0 value1 value2 value3)

或者

array_name=(value0

value1

value2

value3)

還可以單獨定義數(shù)組的各個分量:

array_name[0]=value0

array_name[1]=value1

array_name[n]=valuen

可以不使用連續(xù)的下標垛吗,而且下標的范圍沒有限制。

讀取數(shù)組

讀取數(shù)組元素值的一般格式是:

${數(shù)組名[下標]}

例如:

valuen=${array_name[n]}

使用?@?符號可以獲取數(shù)組中的所有元素烁登,例如:

echo ${array_name[@]}

獲取數(shù)組的長度

獲取數(shù)組長度的方法與獲取字符串長度的方法相同衣洁,例如:

# 取得數(shù)組元素的個數(shù)length=${#array_name[@]}# 或者length=${#array_name[*]}# 取得數(shù)組單個元素的長度lengthn=${#array_name[n]}

Shell 注釋

以?#?開頭的行就是注釋持隧,會被解釋器忽略。

通過每一行加一個?#?號設(shè)置多行注釋诅福,像這樣:

#--------------------------------------------# 這是一個注釋# author:菜鳥教程# site:www.runoob.com# slogan:學的不僅是技術(shù)羽杰,更是夢想扛伍!#--------------------------------------------##### 用戶配置區(qū) 開始 ######## 這里可以添加腳本描述信息# ###### 用戶配置區(qū) 結(jié)束? #####

如果在開發(fā)過程中峰档,遇到大段的代碼需要臨時注釋起來事示,過一會兒又取消注釋,怎么辦呢是钥?

每一行加個#符號太費力了失受,可以把這一段要注釋的代碼用一對花括號括起來,定義成一個函數(shù)咏瑟,沒有地方調(diào)用這個函數(shù),這塊代碼就不會執(zhí)行痪署,達到了和注釋一樣的效果码泞。

多行注釋

多行注釋還可以使用以下格式:

:<<EOF注釋內(nèi)容...注釋內(nèi)容...注釋內(nèi)容...EOF

EOF 也可以使用其他符號:

:<<'

注釋內(nèi)容...

注釋內(nèi)容...

注釋內(nèi)容...

':<<!注釋內(nèi)容...注釋內(nèi)容...注釋內(nèi)容...!

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市狼犯,隨后出現(xiàn)的幾起案子余寥,更是在濱河造成了極大的恐慌,老刑警劉巖悯森,帶你破解...
    沈念sama閱讀 206,482評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件宋舷,死亡現(xiàn)場離奇詭異,居然都是意外死亡瓢姻,警方通過查閱死者的電腦和手機祝蝠,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,377評論 2 382
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來幻碱,“玉大人绎狭,你說我怎么就攤上這事∪彀” “怎么了儡嘶?”我有些...
    開封第一講書人閱讀 152,762評論 0 342
  • 文/不壞的土叔 我叫張陵,是天一觀的道長恍风。 經(jīng)常有香客問我蹦狂,道長誓篱,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 55,273評論 1 279
  • 正文 為了忘掉前任凯楔,我火速辦了婚禮窜骄,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘啼辣。我一直安慰自己啊研,他們只是感情好,可當我...
    茶點故事閱讀 64,289評論 5 373
  • 文/花漫 我一把揭開白布鸥拧。 她就那樣靜靜地躺著党远,像睡著了一般。 火紅的嫁衣襯著肌膚如雪富弦。 梳的紋絲不亂的頭發(fā)上沟娱,一...
    開封第一講書人閱讀 49,046評論 1 285
  • 那天,我揣著相機與錄音腕柜,去河邊找鬼济似。 笑死,一個胖子當著我的面吹牛盏缤,可吹牛的內(nèi)容都是我干的砰蠢。 我是一名探鬼主播,決...
    沈念sama閱讀 38,351評論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼唉铜,長吁一口氣:“原來是場噩夢啊……” “哼台舱!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起潭流,我...
    開封第一講書人閱讀 36,988評論 0 259
  • 序言:老撾萬榮一對情侶失蹤竞惋,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后灰嫉,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體拆宛,經(jīng)...
    沈念sama閱讀 43,476評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 35,948評論 2 324
  • 正文 我和宋清朗相戀三年讼撒,在試婚紗的時候發(fā)現(xiàn)自己被綠了浑厚。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,064評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡根盒,死狀恐怖瞻颂,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情郑象,我是刑警寧澤贡这,帶...
    沈念sama閱讀 33,712評論 4 323
  • 正文 年R本政府宣布,位于F島的核電站厂榛,受9級特大地震影響盖矫,放射性物質(zhì)發(fā)生泄漏丽惭。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,261評論 3 307
  • 文/蒙蒙 一辈双、第九天 我趴在偏房一處隱蔽的房頂上張望责掏。 院中可真熱鬧,春花似錦湃望、人聲如沸换衬。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,264評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽瞳浦。三九已至,卻和暖如春废士,著一層夾襖步出監(jiān)牢的瞬間叫潦,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,486評論 1 262
  • 我被黑心中介騙來泰國打工官硝, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留矗蕊,地道東北人。 一個月前我還...
    沈念sama閱讀 45,511評論 2 354
  • 正文 我出身青樓氢架,卻偏偏與公主長得像傻咖,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子岖研,可洞房花燭夜當晚...
    茶點故事閱讀 42,802評論 2 345

推薦閱讀更多精彩內(nèi)容

  • 一没龙、Python簡介和環(huán)境搭建以及pip的安裝 4課時實驗課主要內(nèi)容 【Python簡介】: Python 是一個...
    _小老虎_閱讀 5,720評論 0 10
  • 官網(wǎng) 中文版本 好的網(wǎng)站 Content-type: text/htmlBASH Section: User ...
    不排版閱讀 4,367評論 0 5
  • Shell 變量定義變量時,變量名不加美元符號(但是$缎玫,PHP語言中變量好像是需要),如: 注意解滓,變量名和等號之間...
    yyshang閱讀 193評論 0 1
  • defer 語句的用途是:含有 defer 語句的函數(shù)赃磨,會在該函數(shù)將要返回之前,調(diào)用另一個函數(shù)洼裤。這個定義可能看起來...
    酷走天涯閱讀 865評論 0 0
  • 圖文回到家邻辉,天已經(jīng)黑了,村口的路燈泛著暗淡的橘色腮鞍,樹影兒在風里影影綽綽地搖動值骇,月亮,終于看到了皎潔的月亮移国,掛在天空...
    火紅的石榴暖暖閱讀 228評論 3 2