數組

數組

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

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

數組名和索引

索引:編號從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 18:42
下一篇 2018-01-02 19:25

相關推薦

  • 新文章

    test 新的開始

    Linux干貨 2016-12-08
  • ?Linux基礎知識之文件權限

    實驗環境:    Linux系統版本為CentOS6.8_x86_64版本,以root用戶和sjsir用戶遠程用xshell連接系統,進行試驗。 文本目錄:    1.文件的屬性    2.文件權限相關的命令    3.umask 新建文件和目錄的默認權限   &nbs…

    Linux干貨 2016-08-05
  • 第三周_Linux用戶基礎命令

    文本操作命令
    用戶相關命令

    Linux干貨 2017-12-24
  • 關于rpm及yum的一些感想

    rpm -ivh PACKAGE_FILE  注意: (1) 不要對內核做升級操作;Linux支持多內核版本并存,因此 ,對直接安裝新版本內核 v rpm {-q嚴格–query} [select-options] [query-options] v [se…

    Linux干貨 2016-08-24
  • 【知識點】NO.1—-關于刪除文件后未及時釋放磁盤空間問題

    刪除了某些占用大存儲的文件,發現占用的磁盤空間并沒有的到釋放。怎么解決呢?
    在工作中經常遇到服務器某個存放日志或者某些數據的磁盤(或者目錄),因為檢查不及時磁盤存儲滿了的狀況。釋放空間真的只是刪除文件這么簡單嗎?nonono…

    2017-11-18
  • SElinux

    selinux  配置文件 修改   就要重啟 targeted:用來保護常見的網路服務,僅有限進程受到selinux控制,只監控容易被入侵的進程。 targeted  慢慢完善的法律 系統默認使用   targeted     CENTOS6 CENTOS7 ZAI &nbsp…

    Linux干貨 2016-09-14
欧美性久久久久