描述:
變量是存儲單個元素的內存空間,而數組是多個變量的集合,是一個連續的空間;但整個數組只能有
的名字。
數組內的數據都有指定的索引,從而找到數組內所指定的數據。索引的編號是從0開始的,依次遞增(0,1,2,3,…),這種方式叫數值索引。格式為:數組名[索引];${ARRAY_NAME[INDEX]}。索引也支持自定義的格式,也被稱為關聯索引,在bash4.0版本后開始支持。bash的數組也支持稀疏格式,即索引不連續(0,2,4,7,8,…)
用法:
1,使用數組需事先聲明,格式如下:
declare -a ARRAY_NAME (聲明索引數組)
declare -A ARRAY_NAME (聲明關聯數組)
2,數組中元素的賦值方式:
1),一次只賦值一個元素
ARRAY_NAME[INDEX]=value
[root@localhost ~]# weekdays[0]="Sunday" [root@localhost ~]# echo ${weekdays[0]} Sunday
2),一次賦值全部元素:
ARRAY_NAME=("VAL1" "VAL2" "VAL3"…)
[root@localhost ~]# weekdays=("Sunday" "Monday" "Tuesday" "Wednesday" "Thursday" "Friday" "Saturday" ) [root@localhost ~]# echo ${weekdays[6]} Saturday [root@localhost ~]# echo ${weekdays[5]} Friday [root@localhost ~]# echo ${weekdays[0]} 第一個元素的索引號是從0開始編號的 Sunday
3),只賦值特定元素
ARRAY_NAME=([0]="VAL1" [3]="VAL4"…)
[root@localhost ~]# weekdays=([0]="Sunday" [2]="Tuesday" [5]="Saturday") [root@localhost ~]# echo ${weekdays[0]} Sunday [root@localhost ~]# echo ${weekdays[2]} Tuesday [root@localhost ~]# echo ${weekdays[5]} Saturday
4),read -a ARRAY_NAME
[root@localhost ~]# read -a number 123 456 789
3,數組的引用
引用數組中的元素:${ARRAY_NAME[INDEX]}
注意:引用時,只給數組名,表示引用下標為0的元素
${ARRY_NAME[*]}
${ARRY_NAME[@]}
數組的長度:(數組中元素的個數)
${#ARRY_NAME[*]}
${#ARRY_NAME[@]}
[root@localhost ~]# weekdays=("Sunday" "Tuesday" "Saturday") [root@localhost ~]# echo ${weekdays[0]} Sunday [root@localhost ~]# echo ${weekdays[*]} Sunday Tuesday Saturday [root@localhost ~]# echo ${weekdays[@]} Sunday Tuesday Saturday [root@localhost ~]# echo ${#weekdays[@]} 3 [root@localhost ~]# echo ${#weekdays[*]} 3
示例:
1,隨機生成10個數,并找出其中的最大值和最小值
[root@localhost ~]# cat sum.sh #!/bin/bash declare -a rand declare -i max declare -i min for i in {0..9};do rand[$i]=$RANDOM echo ${rand[$i]} if [ $i -eq 0 ];then max=${rand[$i]} min=${rand[$i]} else [ "$max" -lt "${rand[$i]}" ] && max=${rand[$i]} [ "$min" -gt "${rand[$i]}" ] && min=${rand[$i]} fi done echo "MAX:$max" echo "MIN:$min" [root@localhost ~]# bash sum.sh 21586 1730 19008 16138 17576 3909 206 27706 3824 11997 MAX:27706 MIN:206
處理數組數據:
語法 |
描述 | |||||||
${!array[*]} |
列出所有元素所對應的索引號 | |||||||
${!array[@]} | 列出所有元素所對應的索引號 | |||||||
${array[*]} | 列出關聯數組的所有元素 | |||||||
${array[@]} | 列出關聯數組的所有元素 | |||||||
${#[array[*]} | 關聯數組的長度(元素個數) | |||||||
${#[array[@]} | 關聯數組的長度(元素個數) |
示例:
設置數組:
[root@localhost ~]# weekdays=("Sunday" "Tuesday" "Saturday")
1,列出數組中所有元素所對應的索引號
[root@localhost ~]# echo ${!weekdays[*]} 0 1 2 [root@localhost ~]# echo ${!weekdays[@]} 0 1 2
2,列出數組中所有的元素
[root@localhost ~]# echo ${weekdays[@]} Sunday Tuesday Saturday [root@localhost ~]# echo ${weekdays[*]} Sunday Tuesday Saturda
3,顯示數組中元素的個數
[root@localhost ~]# echo ${#weekdays[*]} 3 [root@localhost ~]# echo ${#weekdays[@]} 3
數組切片:
格式為:${ARRY_NAME[@]:offset:number}
offset:要路過的元素的個數
number:要取出的元素個數
${ARRAY_NAME[@]:offset}:取偏移量之后的所有元素
示例:
[root@localhost ~]# weekdays=("Sunday" "Monday" "Tuesday" "Wednesday" "Thursday" "Friday" "Saturday") [root@localhost ~]# echo ${weekdays[@]:3:2} Wednesday Thursday [root@localhost ~]# echo ${weekdays[@]:2} Tuesday Wednesday Thursday Friday Saturday
向非稀疏格式數組中追加元素:
ARRAY_NAME[${#ARRAY_NAME[*]}]=
[root@localhost ~]# number=(2 4 6 8) [root@localhost ~]# echo ${number[*]} 2 4 6 8 [root@localhost ~]# number[${#number[*]}]=10 [root@localhost ~]# echo ${number[*]} 2 4 6 8 10
刪除數組中的某元素:
unset ARRAY[INDEX]
[root@localhost ~]# unset number[3] [root@localhost ~]# echo ${number[*]} 2 4 6 10
關聯數組:
declare -A ARRAY_NAME
ARRAY_NAME=([index_name1]="value1" [index_name2]="value2"…)
[root@localhost ~]# declare -A num [root@localhost ~]# num=([jishu]="1 3 5" [oushu]="2 4 6 8") [root@localhost ~]# echo ${num[jishu]} 1 3 5 [root@localhost ~]# echo ${num[oushu]} 2 4 6 8
示例:
輸入若干個數值存入數組中,采用冒泡算法進行升序或降序排序
[root@localhost ~]# cat maopao.sh #!/bin/bash #sorting following array echo "Please input a number list: " read -a arr for ((i=0;i<${#arr[@]};i++));do for ((j=${#arr[@]}-1;j>i;j--));do #echo $j if [[ ${arr[j]} -lt ${arr[j-1]} ]];then t=${arr[j]} arr[j]=${arr[j-1]} arr[j-1]=$t fi done done echo "after sorting: " echo ${arr[@]} [root@localhost ~]# bash maopao.sh Please input a number list: 5 1 4 2 3 0 after sorting: 0 1 2 3 4 5
原創文章,作者:pingsky,如若轉載,請注明出處:http://www.www58058.com/41225