第六章 shell陣列應用
1. 陣列基本概述
2. 陣列基本使用
3. 陣列遍歷與迴圈
01. 什麼是陣列?
陣列其實也算是變數,傳統的變數只能儲存乙個值,但陣列可以儲存多個值。
02. 陣列的分類
shell陣列分為普通陣列和關聯陣列。
普通陣列:只能使用整數作為陣列索引。
關聯陣列:可以使用字串作為陣列索引。
01. 普通陣列僅能使用整數來作為索引
#普通陣列賦值方式
#1.方式一:針對每個索引進行賦值
#2.方式二:一次賦多個值,陣列名=(多個變數值)
[root@rlb ~]# array2=(tom jack alice)
[root@rlb ~]# array3=(tom jack alice "bash shell")
[root@rlb ~]# array4=(1 2 3 "linux shell" [20]=puppet)
#3.方式三:將該檔案中的每乙個列作為乙個元數賦值給陣列array5,預設以空格為分割符
[root@rlb ~]# array5=(`cat /etc/passwd`)
02. 如何檢視普通陣列的賦值與訪問陣列的內容
#1.定義普通陣列,其實也可以不用定義
[root@rlb ~]# declare -a array
#2.統計陣列元數的個數
[root@rlb ~]# echo $
4#3.訪問陣列中的第乙個元素
[root@rlb ~]# echo $
pear
#4.從陣列索引1開始
#5.從陣列索引1開始,訪問兩個元素
#6.訪問陣列中所有資料,相當於echo $
#關聯陣列賦值
#1.定義關聯陣列, 申明是關聯資料
[root@rlb ~]# declare -a tt_array_1
[root@rlb ~]# declare -a tt_array_2
#2.方式一:給關聯陣列進行賦值,陣列名[索引]=變數值
#3.方式二:給關聯陣列一次賦多個值
[root@rlb ~]# tt_array2=([index1]=tom [index2]=jack [index3]=alice [index4]='bash shell')
#4.檢視關聯陣列
[root@rlb ~]# declare -a
04. 如何訪問關聯陣列中的資料。
#1.訪問陣列中的第二個元數
[root@rlb ~]# echo $
jack
#2.訪問陣列中所有元數
等同於 echo $
[root@rlb ~]# echo $
bash shell tom jack alice
#3.訪問陣列中所有元數的索引
[root@rlb ~]# echo $
index4 index1 index2 index3
01.普通陣列賦值與遍歷示例
[root@rlb ~]# cat array-1.sh
#!/usr/bin/bash
#1.使用while讀入乙個檔案
while read line
do#2.定義普通陣列, 將讀入的每行資料,單個單個進行賦值
hosts[i++]=$line
#正常定義普通陣列是hosts[1]=test,只不過我們將變成自增
#$line是讀取的檔案內容
done02.使用關聯陣列統計檔案中的每個shell數量
[root@rlb ~]# cat count_passwd.sh
#!/bin/bash
declare -a array_passwd
#1.對陣列進行賦值
while read line
dotype=$(echo $line|awk -f ':' '')
let array_passwd[$type]++
done #2.對陣列進行遍歷
for i in $
doecho "shell: $i count: $"
done
#步驟拆分講解
[root@rlb ~]# declare -a array_passwd
[root@rlb ~]# array_passwd=([/bin/bash]=1 [/sbin/nologin]=1)
[root@rlb ~]# let array_passwd[/bin/bash]++
[root@rlb ~]# let array_passwd[/sbin/nologin]++
[root@rlb ~]# echo $
/sbin/nologin /bin/bash
[root@rlb ~]# echo $
2 203. 統計nginx日誌ip訪問次數
[root@rlb ~]# cat array_nginx_count.sh
#!/usr/bin/bash
# nginx log top 10 ip conut
declare -a array_nginx
#1.給關聯陣列的索引進行賦值
while read line
dotype=$(echo $line|awk '')
let array_nginx[$type]++
done04. 統計tcp的狀態資訊
[root@rlb ~]# cat array_ss_state.sh
#!/usr/bin/bash
declare -a array_state
type=$(ss -ant |sed '1d' |awk '')
#1.對陣列進行的索引賦值
for i in $type
dolet array_state[$i]++
done
#2.遍歷陣列
for j in $
doecho "當前的狀態是:$j,當前狀態出現了多少次:$"
done
第六章 陣列
從本章開始,就進入了c語言的高階篇.前面講的都是c語言最基本的知識.本章將講解陣列.陣列就是在乙個變數名下存放多個資料的儲存區的說明,是具有相同型別的資料的集合按照一定的順序組成的資料.在處理大量資料的時候,使用陣列十分的方便.陣列和其他型別的變數一樣,必須要先定義後使用.前面講過,c語言中的資料型...
第六章 「另類」陣列
動態陣列與字串常量可算是兩種 另類 陣列。vla可變長陣列並不為c89所支援,c99才開始支援vla。但如果想在只支援c89的編譯環境中使用vla的話,怎麼辦呢?我們可以用動態陣列來 模擬 動態陣列在矩陣的運算中很常見,常用來向函式傳遞乙個大小可變的矩陣。動態陣列的原理,是利用一塊或多塊動態分配的記...
第六章 「另類」陣列
動態陣列與字串常量可算是兩種 另類 陣列。vla可變長陣列並不為c89所支援,c99才開始支援vla。但如果想在只支援c89的編譯環境中使用vla的話,怎麼辦呢?我們可以用動態陣列來 模擬 動態陣列在矩陣的運算中很常見,常用來向函式傳遞乙個大小可變的矩陣。動態陣列的原理,是利用一塊或多塊動態分配的記...