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