shell 第六章 陣列應用

2022-08-24 04:06:15 字數 3154 閱讀 3576

第六章 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的話,怎麼辦呢?我們可以用動態陣列來 模擬 動態陣列在矩陣的運算中很常見,常用來向函式傳遞乙個大小可變的矩陣。動態陣列的原理,是利用一塊或多塊動態分配的記...