數組

數組

量:存儲單個元素的內存空間

數組:存儲多個元素的連續的內存空間,相當于多個變量的集合

數組名和索引

索引:編號從0開始,屬于數值索引

注意:索引可支持使用自定義的格式,而不僅是數值格式,即為關聯索引,

八十的數組支持稀疏格式(索引不連續

聲明數組:

Declare -a ARRAY_NAME

Declare -A ARRAY_NAME:關聯數組

注意:兩者不可相互轉換

數組元素的賦值

  1. 一次只賦值一個元素ARRAY_NAME[INDEX]=VALUE weekdays[0]=”sunday weekdays[4]=”thursday”
  2. 一次賦值全部元素ARRAY_NAME=(“VAL1” “VAL2” “VAL3”..)
  3. 只賦值特定元素 ARRAY_NAME([0]=“VAL1”[3]=”VAL2..”)
  4. 交互式數組值對賦值 read -a ARRAYx

 

Title=({ceo coo cto ufo})

Num=({1..10})

Touch /app/f{1..10}.sh

File=({/app/f*.sh})

只要能生成列表,就可以放進去

 

交互式

Read -a teachers ???mage ??wang ?zhang

echo ${teachers[@]}

 

 

顯示所有數組 :declare -a

引用數組元素

${ARRAY_NAME[INDEX]}

注意:省略[index]表示引用下標為0的元素

引用數組所有元素:

${ARRAY_NAME[*]}

${ARRAY_NAME[@]}

數組的長度(數組中的元素個數)

${#ARRAY_NAME[*]}

${#ARRAY_NAME[@]}

刪除數組中的某個元素:導致稀疏格式

unset ARRAY[index]

刪除整個數組: unset ARRAY

數組數據處理

關聯數組 ??關聯數組意思是下標時自定義的

Declare -A ARRAY_NAME

ARRAY_NAME=([IDX_NAME]=’VAL1’ [IDX_NAME2]=’VAL2’…)

關聯數組必須先聲明再調用

declare -A arr

Arr[a]=1

Arr[b]=2

Arr[c]=3

向數組中追加元素

num={[1..10]}

unset num [3]

Num[3]=44

 

 

#!/bin/bash

declare -A ?disk

df|grep ‘/dev/sd’ > df.log

while read line;do

????????index=`echo $line|cut -d ” ” -f1`

????????echo index=$index

????????per=`echo $line |sed -r ‘s/.* ([0-9]+)%.*/\1/’`

????????echo per=$per

????????disk[“$index”]=$per

????????echo ${disk[*]}

????????echo “========”

done < df.log

echo ${disk[*]}

注意:df linux服務器的文件系統的磁盤空間占用情

df|grep ‘/dev/sd’ > df.log將grep取出來的數據重定向到df.log中,done < df.log 將文件中的數據送給read,read逐行讀取數據進行處理,每次處理都打印相關的輸出,最后跳出循環,打印數組所有值,

While開啟一個子循環,它的父循環中的數據對子循環無效,因此要重新定義到df.log中,

數組數據處理

引用數組中的元素:

數組切片:${ARRYAY[@]:offset:number}

Offset:要跳出的元素個數

Number:要取出的元素個數

取偏移量之后的所有元素

${ARRAY[@]:offset}

num=({1..10})

{num[@]:3:4} ?跳過3個取4個

向數組中追加元素:ARRAY[${#ARRAY[@]}]=VALUE

題目:生成10個隨機數保存于數組中,并找出其最大值和最小值

#!/bin/bash

declare -a rand

for ((i=0;i<10;i++));do

rand[$i]=$RANDOM

[ “$i”-eq 0 ] && max=${rand[$i]} && min=${rand[$i]} && continue

[ ${rand[$i]} -gt $max ] && ?max=${rand[$i]} && continue

[ ${rand[$i]} -lt $min ] && min=${rand[$i]}

done

echo ${rand[*]}

echo “max:$max ?min:$min”

~

 

#!/bin/bash

declare -a rand

declare -i max=0

declare -i min=32767 ??#隨機生成的數字,最大值時32767

for i in {0..9};do

????????rand[$i]=$RANDOM

????????echo ${rand[$i]}

????????[ ${rand[$i]} -gt $max ] && max=${rand[$i]}

????????[ ${rand[$i]} -lt $min ] && min=${rand[$i]}

done

echo “max:$max” “min:$min”

編寫腳本,定義一個數組,數組中的元素是/var/log目錄下所有已.log結尾的文件;統計出其下方為偶數的文件中的行數之和

#!/bin/bash

#

declare -a files

files=(/var/log/*.log)

declare -i lines=0

for i in $(seq 0 $[${#files[*]}-1]);do

if [ $[$i%2] -eq 0 ];then

let lines+=$(wc -l ${files[$i]} | cut -d’ ‘ -f1)

fi

done

echo “lines: $lines.”

題目,將下圖所示,實現轉置矩陣matrix.sh

 

#!/bin/bash

declare -A matrix=([00]=1 [01]=2 [02]=3 [10]=4 [11]=5 [12]=6 [20]=7 [21]=8 [22]=9)

size=3

showmatrix(){

for ((i=0;i<size;i++));do

for((j=0;j<size;j++));do

echo -n “${matrix[$i$j]} ??”

done

echo

done

}

echo “Before convert”

showmatrix

for ((i=0;i<size;i++));do

for((j=i;j<size;j++));do

if [ $i -ne $j ];then

temp=${matrix[$i$j]}

matrix[$i$j]=${matrix[$j$i]}

matrix[$j$i]=$temp

fi

done

echo

done

echo “After convert”

showmatrix

本文來自投稿,不代表Linux運維部落立場,如若轉載,請注明出處:http://www.www58058.com/90783

(0)
sunchunjiangsunchunjiang
上一篇 2018-01-02
下一篇 2018-01-02

相關推薦

  • Linux學習 Grep詳則。

    grep 功能說明:查找文件里符合條件的字符串。 語  法:grep [-abcEFGhHilLnqrsvVwxy][-A<顯示列數>][-B<顯示列數>][-C<顯示列數>][-d<進行動作>][-e<范本樣式>][-f<范本文件>][–help][范本樣式][文件或目錄&…

    Linux干貨 2017-07-24
  • 刪除三天前備份的腳本

    [root@scm-dzm testfolder]# ll total 4 drwxr-xr-x. 2 root root   6 Jul 14 00:53 20160722 drwxr-xr-x. 2 root roo…

    Linux干貨 2016-07-16
  • CentOS7口令破解

    一.rd.break方式修改  1.啟動時任意鍵暫停啟動      2.按e 鍵進入編輯模式 將光標移動linux16 開始的行,添加內核參數rd.break 按ctrl-x 啟動 3.重新掛載可讀可寫根目錄 :mount –o remount,rw /sysroot 切回根目錄: chroot /sysroot 修改…

    Linux干貨 2016-11-29
  • Linux第三周總結

    1、列出當前系統上所有已經登錄的用戶的用戶名,注意:同一個用戶登錄多次,則只顯示一次即可。 ~]# who | cut -d ” -f1 | uniq 2、取出最后登錄到當前系統的用戶的相關信息。 ~]# who|tail -1 3、取出當前系統上被用戶當作其默認shell的最多的那個shell ~]# cut -d’:’…

    2017-07-16
  • 高級變量-有類型變量

    一.高級變量用法– 有類型變量   Shell 變量一般是無類型的,但是bash Shell 提供了declare和 typeset 兩個命令用于指定變量的類型,兩個命令是等價的 declare [ 選項]  變量名 -r  將變量設置為只讀屬性 -i  將變量定義為整型數 -a  將變量定義為數…

    Linux干貨 2016-11-24
欧美性久久久久