數組格式
普通數組下標是數字
關聯數組下標是字符串
例子:
a=(10 20 30 40 50)
a[0] 10
數組的分類(普通數組和關聯數組)
普通數組
可以不需要手動聲明,直接使用
declare -a 數組名
關聯數組
一定要手動聲明
adeclare -A 數組名
定義數組
1.數組名=(數值1 數值2 數值3 ...數值n)數值之前用空格隔開
2.單個賦值:
? ? ? ? ? ? ? ? ? ? 數組名[0]=值1
? ? ? ? ? ? ? ? ? ? 數組名[1]=值2
? ? ? ? ? ? ? ? ? ? 數組名[2]=值3
變量和數組
變量:只存儲一個值,(一對一)
數組:相當于多個變量的數據集合(一對多)
調用數組(單個調用、
舉例a是數組名
單個調用
echo ${a[0]}#調用第一個值
echo ${a[1]}#調用第二個值
……………………………………
echo ${a[n]}#調用第n個值
cd /opt ? a=(*.sh) ? #hh=當前文件夾下的以.sh結尾的 echo ${a[0]} #調用第一個.sh結尾的值 ? echo ${!a[@]} #顯示所有多少下標(追加的時候看一下有哪些下標,防止搞混) ?
全部調用
echo ${a[@]}
echo ${a[*]}
顯示數組的值的個數
echo ${#a[@]}
顯示所有下標
echo ${!a[@]}
刪除數組
unset 數組名 # 將整個數組刪除
unset a[0] #只刪除數組的第一個值
關聯數組(要先手動聲明)
declare -A f ? #先聲明f ? f[name]=hyh f[address]=nj f[p]=3 ? echo ${f[p]} 3 echo ${f[address]} nj echo ${f[name]} hyh
數組切片
?${ARRAY[@]:offset:number} offset #要跳過的元素個數 number #要取出的元素個數 #取偏移量之后的所有元素 {ARRAY[@]:offset} ? [root@centos8 ~]#num=({0..10}) [root@centos8 ~]#echo ${num[*]:2:3} 2 3 4 [root@centos8 ~]#echo ${num[*]:6} 6 7 8 9 10
數組遍歷
for i in ${a[@]} ? do ? echo $i ? done
數組之冒泡排序
原理:
數組中相鄰兩個數進行比較,不滿足條件就交換。
以對0-9這10個數來進舉例。
eg:對9 8 7 6 5 4 3 2 1 0進行升序。
思路:
首先讓9與8進行比較,9比8大,故9與8交換位置,在讓9與7將進行比較,以此類推,比較玩的數組變為8 7 6 5 4 3 2 1 0 9,,這稱為一趟冒泡排序。同理,讓8在與后面的數進行比較,最終完成升序,10個元素進行冒泡排序,共需9趟排序,思路確定后,接下來我們來編寫代碼。
示例題:在0-3萬的隨機數中隨機生成十位不同的數并排序
#!/bin/bash ? for i in {0..9} ? #生成一個隨機數組{從0到9} doa[$i]=$RANDOM ? #數組的值為0-3萬的隨機數 done ? echo"原始數組為:${a[@]}" l=${#a[@]} ? ? ? ? ? ? #定義變量l為數組a的長度10 for((i=1;i<$l-$i;i++)) #需要比較的輪次 dofor((j=0;j<$i)) #相鄰的數需要比較的次數dofirst=${a[$j]} ? #數組的第一個數k=$[$j+1]#計算數組下一個數的下標second=${a[$k]}#下一個數if[ $fire -gt $second ]thentemp=$firsta[$j]=$seconda[$k]=$tempfidone done ? echo"${原始數組為a[@]}" ?