Shell命令之?dāng)?shù)組表示語法學(xué)習(xí)
引言
數(shù)組中可以存放多個值。Bash Shell 只支持一維數(shù)組(不支持多維數(shù)組),初始化時不需要定義數(shù)組大?。ㄅc PHP 類似)。
與大部分編程語言類似,數(shù)組元素的下標(biāo)由 0 開始。
Shell 數(shù)組用括號來表示,元素用"空格"符號分割開,語法格式如下:
array_name=(value1 value2 ... valuen)
一、實例
創(chuàng)建一個簡單的數(shù)組 my_array:
my_array=(A B "C" D)
我們也可以使用數(shù)字下標(biāo)來定義數(shù)組:
array_name[0]=value0 array_name[1]=value1 array_name[2]=value2
二、讀取數(shù)組
讀取數(shù)組元素值的一般格式是:
${array_name[index]}
以下實例通過數(shù)字索引讀取數(shù)組元素:
my_array=(A B "C" D) echo "第一個元素為: ${my_array[0]}" echo "第二個元素為: ${my_array[1]}" echo "第三個元素為: ${my_array[2]}" echo "第四個元素為: ${my_array[3]}"
執(zhí)行腳本,輸出結(jié)果如下所示:
$ chmod +x test.sh
$ ./test.sh
第一個元素為: A
第二個元素為: B
第三個元素為: C
第四個元素為: D
三、關(guān)聯(lián)數(shù)組
Bash 支持關(guān)聯(lián)數(shù)組,可以使用任意的字符串、或者整數(shù)作為下標(biāo)來訪問數(shù)組元素。
關(guān)聯(lián)數(shù)組使用 declare 命令來聲明,語法格式如下:
declare -A array_name
-A 選項就是用于聲明一個關(guān)聯(lián)數(shù)組。
關(guān)聯(lián)數(shù)組的鍵是唯一的。
以下實例我們創(chuàng)建一個關(guān)聯(lián)數(shù)組 site,并創(chuàng)建不同的鍵值:
declare -A site=(["google"]="www.google.com" ["runoob"]="www.runoob.com" ["taobao"]="www.taobao.com")
我們也可以先聲明一個關(guān)聯(lián)數(shù)組,然后再設(shè)置鍵和值:
declare -A site site["google"]="www.google.com" site["runoob"]="www.runoob.com" site["taobao"]="www.taobao.com"
也可以在定義的同時賦值:
訪問關(guān)聯(lián)數(shù)組元素可以使用指定的鍵,格式如下:
array_name["index"]
以下實例我們通過鍵來訪問關(guān)聯(lián)數(shù)組的元素:
declare -A site site["google"]="www.google.com" site["runoob"]="www.runoob.com" site["taobao"]="www.taobao.com" echo ${site["runoob"]}
執(zhí)行腳本,輸出結(jié)果如下所示:
www.runoob.com
四、獲取數(shù)組中的所有元素
使用 @ 或 * 可以獲取數(shù)組中的所有元素,例如:
my_array[0]=A my_array[1]=B my_array[2]=C my_array[3]=D echo "數(shù)組的元素為: ${my_array[*]}" echo "數(shù)組的元素為: ${my_array[@]}"
執(zhí)行腳本,輸出結(jié)果如下所示:
$ chmod +x test.sh
$ ./test.sh
數(shù)組的元素為: A B C D
數(shù)組的元素為: A B C D
declare -A site site["google"]="www.google.com" site["runoob"]="www.runoob.com" site["taobao"]="www.taobao.com" echo "數(shù)組的元素為: ${site[*]}" echo "數(shù)組的元素為: ${site[@]}"
執(zhí)行腳本,輸出結(jié)果如下所示:
$ chmod +x test.sh $ ./test.sh 數(shù)組的元素為: www.google.com www.runoob.com www.taobao.com 數(shù)組的元素為: www.google.com www.runoob.com www.taobao.com
在數(shù)組前加一個感嘆號 ! 可以獲取數(shù)組的所有鍵,例如:
declare -A site site["google"]="www.google.com" site["runoob"]="www.runoob.com" site["taobao"]="www.taobao.com" echo "數(shù)組的鍵為: ${!site[*]}" echo "數(shù)組的鍵為: ${!site[@]}"
執(zhí)行腳本,輸出結(jié)果如下所示:
數(shù)組的鍵為: google runoob taobao
數(shù)組的鍵為: google runoob taobao
五、獲取數(shù)組的長度
獲取數(shù)組長度的方法與獲取字符串長度的方法相同,例如:
my_array[0]=A my_array[1]=B my_array[2]=C my_array[3]=D echo "數(shù)組元素個數(shù)為: ${#my_array[*]}" echo "數(shù)組元素個數(shù)為: ${#my_array[@]}"
執(zhí)行腳本,輸出結(jié)果如下所示:
$ chmod +x test.sh
$ ./test.sh
數(shù)組元素個數(shù)為: 4
數(shù)組元素個數(shù)為: 4
看數(shù)組的時候,覺得遍歷數(shù)組用的比較多,所以自己試著寫了寫遍歷,同時試了一下在SHELL腳本中的變量自增幾個寫法,在就新手學(xué)習(xí)的時候注意一下 [ 和 $ 之間要有空格,沒有空格運行會報錯,新手可能不太注意這一點,我開始就沒注意到~~~~
示例如下:
#!/bin/bash my_arry=(a b "c","d" abc) echo "-------FOR循環(huán)遍歷輸出數(shù)組--------" for i in ${my_arry[@]}; do echo $i done echo "-------::::WHILE循環(huán)輸出 使用 let i++ 自增:::::---------" j=0 while [ $j -lt ${#my_arry[@]} ] do echo ${my_arry[$j]} let j++ done echo "--------:::WHILE循環(huán)輸出 使用 let "n++ "自增: 多了雙引號,其實不用也可以:::---------" n=0 while [ $n -lt ${#my_arry[@]} ] do echo ${my_arry[$n]} let "n++" done echo "---------::::WHILE循環(huán)輸出 使用 let m+=1 自增,這種寫法其他編程中也常用::::----------" m=0 while [ $m -lt ${#my_arry[@]} ] do echo ${my_arry[$m]} let m+=1 done echo "-------::WHILE循環(huán)輸出 使用 a=$[$a+1] 自增,個人覺得這種寫法比較麻煩::::----------" a=0 while [ $a -lt ${#my_arry[@]} ] do echo ${my_arry[$a]} a=$[$a+1] done
Bourne shell(原生kernel下)下不支持?jǐn)?shù)組,只能通過模擬來實現(xiàn)類似數(shù)組功能。
實例 1
#!/bin/sh #注意不是/bin/bash echo "##############使用eval函數(shù)###############" echo "使用參考:" echo "http://www.runoob.com/linux/linux-comm-eval.html" eval a1=bili eval a2=nico eval a3=yama for i in 1 2 3 ; do eval echo "$a$i" done
輸出結(jié)果:
##############使用eval函數(shù)###############
使用參考:
http://www.runoob.com/linux/linux-comm-eval.html
bili
nico
yama
實例 2
#!/bin/sh #注意不是/bin/bash echo "##########################################" echo "指令參考:" echo "http://www.runoob.com/linux/linux-comm-expr.html" :<<! 根據(jù)用戶輸入的一句話來定義數(shù)組 并遍歷數(shù)組元素 ! echo "輸入字符串(以空格分開):" read str i=0 for word in $str; do i=`expr $i + 1` eval a$i="$word" eval echo "數(shù)組的第 $i 個元素為: $a$i" done
輸出結(jié)果:
##########################################
指令參考:
http://www.runoob.com/linux/linux-comm-expr.html
輸入字符串(以空格分開):
runoob google taobao
數(shù)組的第 1 個元素為: runoob
數(shù)組的第 2 個元素為: google
數(shù)組的第 3 個元素為: taobao
字符串轉(zhuǎn)數(shù)組:
#!/bin/bash words="aaa bbb ccc" #字符串轉(zhuǎn)數(shù)組,空格是分隔符 array=(${words// / }) #打印數(shù)組最后一個成員 echo ${array[${#array[*]}-1]} #打印數(shù)組長度 echo ${#array[*]} #字符串不轉(zhuǎn)換為數(shù)組,在循環(huán)實現(xiàn)以空格為分隔符打印每個成員 for word in ${words}; do echo ${word} done
運行結(jié)果:
ccc3aaabbbccc
以上就是Shell命令之?dāng)?shù)組表示語法學(xué)習(xí)的詳細(xì)內(nèi)容,更多關(guān)于Shell命令語法數(shù)組表示的資料請關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
用Shell腳本快速搭建Ubuntu下的Nodejs開發(fā)環(huán)境
這篇文章主要介紹了用Shell腳本快速搭建Ubuntu下的Nodejs開發(fā)環(huán)境的方法,需要的朋友可以參考下2014-03-03Linux?du命令實現(xiàn)根據(jù)文件或者文件夾大小排序輸出
Linux是一個強大的操作系統(tǒng),廣泛用于服務(wù)器和個人計算機,本文主要來和大家聊聊如何利用du命令實現(xiàn)根據(jù)文件或者文件夾大小排序輸出,感興趣的可以了解下2023-09-09Shell腳本獲取本地網(wǎng)卡IP、mac地址、子網(wǎng)掩碼、dns IP、外網(wǎng)IP
這篇文章主要介紹了Shell腳本獲取本地網(wǎng)卡IP、mac地址、子網(wǎng)掩碼、dns IP、外網(wǎng)IP,本文直接給出實現(xiàn)代碼,需要的朋友可以參考下2014-10-10Shell腳本實現(xiàn)監(jiān)控kingate并自動啟動
這篇文章主要介紹了Shell腳本實現(xiàn)監(jiān)控kingate并自動啟動,本文直接給出實現(xiàn)代碼,需要的朋友可以參考下2014-12-12