Shell編程-12-Shell中的數(shù)組

? ? 如果大家有其他語(yǔ)言的基礎(chǔ)或經(jīng)驗(yàn)缺脉,就很快能明白數(shù)組了上真。簡(jiǎn)單來(lái)說(shuō),數(shù)組就某一種相同類(lèi)型的元素組合绢馍,而后通過(guò)下標(biāo)對(duì)其進(jìn)行訪(fǎng)問(wèn)各元素向瓷。

數(shù)組基礎(chǔ)

基礎(chǔ)語(yǔ)法

  • 第一種形式
 array=(value1 value2 value3 ...)
  • 第二種形式
array=([0]=value1 [1]=value2 [2]=value3 ...)

在以上形式中中括號(hào)代表的數(shù)組的下標(biāo)索引,等號(hào)后面為其對(duì)應(yīng)的值舰涌。

  • 第三種形式
array[0]=value1;array[1]=value2;array[2]=value3
  • 第四種形式:動(dòng)態(tài)數(shù)組
array=($(命令))

array=(`命令`)

在日常使用中推薦大家使用第一種形式和第四種形式

數(shù)組示例

  • 第一種形式
[root@localhost Test]# array=(1 3 5)
[root@localhost Test]# echo ${array[*]}
1 3 5
  • 第二種形式
[root@localhost Test]# array=([0]=1 [1]=3 [2]=5)
[root@localhost Test]# echo ${array[*]}
1 3 5
  • 第三種形式
[root@localhost Test]# array[0]=1;array[1]=3;array[2]=5
[root@localhost Test]# echo ${array[*]}
1 3 5
  • 第四種形式:動(dòng)態(tài)數(shù)組
[root@localhost Test]# array=($(ls))
[root@localhost Test]# echo ${array[*]}
break.sh caseif.sh case.sh compareNum.sh

[root@localhost Test]# array=(`ls`)
[root@localhost Test]# echo ${array[*]}
break.sh caseif.sh case.sh compareNum.sh

數(shù)組輸出

? 數(shù)組輸出通過(guò)采用下標(biāo)索引的形式進(jìn)行輸出猖任,輸出數(shù)組的格式如下所示:

${ 數(shù)組名稱(chēng) [下標(biāo)索引] }

如未指定數(shù)組下標(biāo),則默認(rèn)下標(biāo)索引從0開(kāi)始;如果使用或@則代表輸出整個(gè)數(shù)組元素*瓷耙。

[root@localhost Test]# array=(1 3 5)
[root@localhost Test]# echo ${array[2]} # 輸出第3個(gè)元素
5
[root@localhost Test]# echo ${array}    # 未指定下標(biāo)輸出第1個(gè)元素
1
[root@localhost Test]# echo ${array[*]} #  使用 * 輸出整個(gè)數(shù)組元素
1 3 5
[root@localhost Test]# echo ${array[@]} #  使用 @ 輸出整個(gè)數(shù)組元素
1 3 5

數(shù)組長(zhǎng)度

? 輸出數(shù)長(zhǎng)度常用格式如下所示:

${ #數(shù)組名稱(chēng) [*] }
或
${ #數(shù)組名稱(chēng) [@] }

示例如下所示:

[root@localhost Test]# array=(1 3 5)
[root@localhost Test]# echo ${#array[*]}
3
[root@localhost Test]# echo ${#array[@]}
3

數(shù)組賦值

? 可通過(guò)數(shù)組名[下標(biāo)索引]對(duì)數(shù)組進(jìn)行賦值朱躺,其格式如下所示:

數(shù)組名[下標(biāo)索引]=value
  • 如果下標(biāo)不存在,則自動(dòng)向數(shù)組添加一個(gè)新的元素值
  • 如果下標(biāo)存在搁痛,則會(huì)覆蓋先前的元素值

示例如下所示:

[root@localhost Test]# array=(1 3 5)
[root@localhost Test]# array[2]=100  # 下標(biāo)存在长搀,覆蓋之前的元素
[root@localhost Test]# array[5]=888  # 下標(biāo)不存在,則自動(dòng)添加一個(gè)新的元素值
[root@localhost Test]# echo ${array[*]}
1 3 100 888
[root@localhost Test]# echo ${#array[@]}
4

數(shù)組刪除

? 數(shù)組本質(zhì)上還是一種變量鸡典,因此通過(guò)使用unset進(jìn)行清除數(shù)組元素源请。其語(yǔ)法格式如下所示:

unset 數(shù)組名稱(chēng)[下標(biāo)索引]

如果不帶下標(biāo)索引,則表示清除整個(gè)數(shù)組,需要注意與輸出數(shù)組元素不帶下標(biāo)索引的區(qū)別

示例如下所示:

[root@localhost Test]# array=(1 3 5 7 9)
[root@localhost Test]# echo ${array[@]}
1 3 5 7 9
[root@localhost Test]# unset array[1] # 清除數(shù)組中第2個(gè)元素
[root@localhost Test]# echo ${array[@]}
1 5 7 9
[root@localhost Test]# unset array    # 清除整個(gè)數(shù)組
[root@localhost Test]# echo ${array[@]}
                                      # 清除數(shù)組后谁尸,輸出為空

數(shù)組刪除擴(kuò)展方法

[root@localhost Test]# b=(a b c d e f g h i)
[root@localhost Test]# echo ${b[*]}
a b c d e f g h i
[root@localhost Test]# echo ${b[*]#a*}  # 從左邊開(kāi)始匹配最短的數(shù)組元素并刪除
b c d e f g h i
[root@localhost Test]# echo ${b[*]##b*} # 從左邊開(kāi)始匹配最長(zhǎng)的數(shù)組元素并刪除
a c d e f g h i
[root@localhost Test]# echo ${b[*]%i*}  # 從右邊開(kāi)始匹配最短的數(shù)組元素并刪除
a b c d e f g h
[root@localhost Test]# echo ${b[*]%%g*} # 從右邊開(kāi)始匹配最長(zhǎng)的數(shù)組元素并刪除
a b c d e f h i
[root@localhost Test]# echo ${b[*]}     # 該刪除并不影響原數(shù)組的內(nèi)容
a b c d e f g h i

數(shù)組從某種意義上來(lái)說(shuō)舅踪,就是一種特殊的字符變量,因此也適合前面講的子符串處理的功能症汹。

數(shù)組截取與替換

? 數(shù)組的截取示例如下所示:

[root@localhost Test]# a=($(echo {0..9}))
[root@localhost Test]# echo ${a[*]}
0 1 2 3 4 5 6 7 8 9
[root@localhost Test]# echo ${a[*]:1:3} # 截取下標(biāo)索引1~3的元素
1 2 3
[root@localhost Test]# echo ${a[*]:0:2}# 截取下標(biāo)索引0~2的元素
0 1

? 數(shù)組的替換格式如下所示:

${ 數(shù)組名[*/@]/查找字符/替換字符 }

該替換操作并不會(huì)改變?cè)鹊臄?shù)組內(nèi)容

? 數(shù)組的替換示例如下所示:

[root@localhost Test]# echo ${a[*]}
0 1 2 3 4 5 6 7 8 9
[root@localhost Test]# echo ${a[*]/4/456} # 將4替換為456
0 1 2 3 456 5 6 7 8 9
[root@localhost Test]# echo ${a[*]}
0 1 2 3 4 5 6 7 8 9

數(shù)組示例

1硫朦、使用循環(huán)打印數(shù)組元素

[root@localhost Test]# cat array.sh
#!/bin/bash
array=($(echo {0..5}))
echo "first method"
for((i=0;i<${#array[*]};i++)) # 類(lèi)C風(fēng)格的for循環(huán)
  do
    echo ${i}
  done

echo "second method"
for ele in ${array[*]}  # for in 循環(huán)
 do
   echo ${ele}
 done

[root@localhost Test]# bash array.sh
first method
0
1
2
3
4
5
second method
0
1
2
3
4
5

數(shù)組總結(jié)

  • 1贷腕、數(shù)組定義
array=(1 2 3) # 靜態(tài)數(shù)組
array=($(ls)) # 動(dòng)態(tài)數(shù)組
  • 2背镇、數(shù)組賦值
array[3]=5
  • 3、數(shù)組刪除
unset array[3]
  • 4泽裳、數(shù)組輸出
 ${array[*]}或${array[@]} # 輸出數(shù)組全部?jī)?nèi)容
 ${array[1]}              # 輸出數(shù)組單個(gè)元素
  • 5瞒斩、數(shù)組長(zhǎng)度
 ${#array[*]}或${#array[@]} # 輸出數(shù)組長(zhǎng)度
  • 6、循環(huán)輸出數(shù)組元素
for((i=0;i<${#array[*]};i++))
  do
    echo ${i}
  done
或
for ele in ${array[*]}
 do
   echo ${ele}
 done
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末涮总,一起剝皮案震驚了整個(gè)濱河市胸囱,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌瀑梗,老刑警劉巖烹笔,帶你破解...
    沈念sama閱讀 212,718評(píng)論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異抛丽,居然都是意外死亡谤职,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,683評(píng)論 3 385
  • 文/潘曉璐 我一進(jìn)店門(mén)亿鲜,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)允蜈,“玉大人,你說(shuō)我怎么就攤上這事蒿柳∪奶祝” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 158,207評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵垒探,是天一觀(guān)的道長(zhǎng)妓蛮。 經(jīng)常有香客問(wèn)我,道長(zhǎng)圾叼,這世上最難降的妖魔是什么蛤克? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 56,755評(píng)論 1 284
  • 正文 為了忘掉前任,我火速辦了婚禮褐奥,結(jié)果婚禮上咖耘,老公的妹妹穿的比我還像新娘。我一直安慰自己撬码,他們只是感情好儿倒,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,862評(píng)論 6 386
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著,像睡著了一般夫否。 火紅的嫁衣襯著肌膚如雪彻犁。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 50,050評(píng)論 1 291
  • 那天凰慈,我揣著相機(jī)與錄音汞幢,去河邊找鬼。 笑死微谓,一個(gè)胖子當(dāng)著我的面吹牛森篷,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播豺型,決...
    沈念sama閱讀 39,136評(píng)論 3 410
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼仲智,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了姻氨?” 一聲冷哼從身側(cè)響起钓辆,我...
    開(kāi)封第一講書(shū)人閱讀 37,882評(píng)論 0 268
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎肴焊,沒(méi)想到半個(gè)月后前联,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,330評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡娶眷,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,651評(píng)論 2 327
  • 正文 我和宋清朗相戀三年似嗤,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片茂浮。...
    茶點(diǎn)故事閱讀 38,789評(píng)論 1 341
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡双谆,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出席揽,到底是詐尸還是另有隱情顽馋,我是刑警寧澤,帶...
    沈念sama閱讀 34,477評(píng)論 4 333
  • 正文 年R本政府宣布幌羞,位于F島的核電站寸谜,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏属桦。R本人自食惡果不足惜熊痴,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 40,135評(píng)論 3 317
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望聂宾。 院中可真熱鬧果善,春花似錦、人聲如沸系谐。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,864評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至鄙煤,卻和暖如春晾匠,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背梯刚。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,099評(píng)論 1 267
  • 我被黑心中介騙來(lái)泰國(guó)打工凉馆, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人亡资。 一個(gè)月前我還...
    沈念sama閱讀 46,598評(píng)論 2 362
  • 正文 我出身青樓澜共,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親沟于。 傳聞我的和親對(duì)象是個(gè)殘疾皇子咳胃,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,697評(píng)論 2 351

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

  • 來(lái)源:NumPy Tutorial - TutorialsPoint 譯者:飛龍 協(xié)議:CC BY-NC-SA 4...
    布客飛龍閱讀 32,725評(píng)論 6 96
  • “你昨天沒(méi)來(lái)么供璧?”不二家的伙伴如是問(wèn)的,我也不確定這句話(huà)是我現(xiàn)在聽(tīng)到的的冻记,還是十秒鐘之前睡毒,現(xiàn)在是207年4月27日...
    莫己知也閱讀 181評(píng)論 0 0
  • 前不久,是《武林外傳》播出的十周年的紀(jì)念日冗栗,那些場(chǎng)景演顾,勾起了許多人的美好回憶。也有人曬出了如今的拍攝地隅居,落...
    僵尸吃了你的腦子1閱讀 284評(píng)論 0 0
  • 夜晚是一顆毒藥 我服下 賭上所有的夢(mèng)跟你走 前方35°傾斜 雨水和海水混合成冰 讓我觸礁 于是我深陷黑暗 卻伸手畫(huà)...
    鹿春丶閱讀 282評(píng)論 0 4
  • 農(nóng)歷九月二十四钠至,晴 今天帶女兒參加幼兒園秋游 女兒玩的很開(kāi)心 也能跟著其他小朋友去玩,在沒(méi)有媽媽的陪伴下 這也算一...
    玲萍閱讀 219評(píng)論 0 0