六 shell陣列實戰例項

2021-10-06 06:31:35 字數 4625 閱讀 3442

普通陣列:只能使用整數作為陣列索引(列表)

關聯陣列:可以使用字串作為陣列索引 (字典)

一、普通陣列

定義陣列分為兩種方法

方法二:一次賦多個值

二、關聯陣列

陣列分類

1.普通變數

name=tianyun

+--------------------+

|t |i |a |n |y |u |n | 變數值

----------------------

|0 |1 |2 |3 |4 |5 |6 | 索引

+--------------------+

2.普通陣列

books=

(linux shell awk openstack docker)

+------------------------------------+

|linux |shell |

awk|openstack |docker| 變數

--------------------------------------

| 0 | 1 | 2 | 3 | 4 | 索引(下標)

+------------------------------------+

3.關聯陣列

info=

([name]

=shm [***]

=man [age]

=21 [height]

=175 [skill]

=cloud)

+---------------------------------+

|shm |

man|21 | 175 |cloud |

-----------------------------------

|name |*** |age | height |skill | 索引(字元索引)

+---------------------------------+

-a:定義成普通陣列 declare -a 陣列名

-a:定義成關聯陣列 declare -a 陣列名

在後面為單獨講到,普通陣列和關聯陣列不同的新增資料方法

echo $

echo $ 訪問陣列中的第乙個元數

echo $ 訪問陣列中的所有元數,等同於 $

echo $ 統計陣列中元數的個數

echo $ 獲取陣列中的所有元素

echo $ 獲取陣列中的所有元素總數

echo $ 獲取陣列中所有元數的索引下標

echo $ 從陣列下標2開始

echo $ 從陣列下標2開始,只訪問2個元素

陣列名[下標]=變數值案例1:以陣列的形式遍歷/etc/hosts檔案

#!/bin/bash

通過讀取乙個檔案,來迴圈為陣列賦值,每次只賦乙個值

while

read line

do hosts[++i]

=$line

done

輸出陣列得到第乙個值

echo

"hosts first:$"

遍歷陣列中的所有索引下標

for i in$do

輸出下標:對應索引下標的值

echo

"$i:$"

done

[root@localhost shell]

# sh array_hosts.sh

host first: 127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4

1:127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4

2:::1 localhost localhost.localdomain localhost6 localhost6.localdomain6

3:192.168.10.1 www.shm.com

4:192.168.10.2 web.shm.com

5:192.168.10.3 php.shm.com

6:

#array2=(tom jack alice)

#array3=(`cat /etc/passwd`)

#array4=(`ls /var/ftp/shell/for*`)

#array5=(tom jack alice 「bash shell」) 4個元素,引號內的屬於乙個元素

#colors=($red $blue $green rec

olor

)4個顏

色,每一

個recolor) 4個顏色,每乙個

recolo

r)4個

顏色,每

乙個代表乙個變數

陣列建立時預設為普通陣列,所以不需要用declare -a 提前指定。但是關聯陣列需要在指令碼行首提前指定。

declare -a 陣列名

陣列名=([key1]=value [key2]=value … )

陣列名+=([key3]=value) #追加元素到陣列當中

let 陣列名[元素]++ 自增陣列元素的值,自增+1

#!/bin/bash

declare -a ***

while

read line

do type=

`echo $line |

awk''

` let ***[

$type

]++ #let ***[m]++ / let ***[f]++

done

< ***.txt

for i in$do

echo

"$i:$"

done

#!/usr/bin/bash

declare -a shells

while

read line

do type=

`echo $line |

awk -f ":"''`

let shells[

$type

]++done

< /etc/passwd

for i in$do

echo

"$i: $"

done

#!/bin/bash

count tcp status

v1.0 by shm

declare -a status

while:do

獲取所有的連線狀態

type=

`ss -an |

grep :80 |

awk''

` 將所有連線狀態生成乙個陣列

for i in

$type

dolet status[

$i]++

done

遍歷陣列的值和數量

for j in$do

echo

"$j:$"

done

sleep 5

clear

done

執行指令碼:在乙個小時內不間斷統計訪問狀態

在乙個小時內不間斷獲取ip訪問數量

watch -n1 ./count_ip.sh

shell陣列常用例項分享

說明 shell中陣列的下標預設是從0開始的 1 將字串放在陣列中,獲取其長度 複製 如下 bin bash str a b n d array str length echo length for i 0 irgqetzgtaxngth i doecho done 執行結果 oracle 99bi...

Shell指令碼實戰 DNS主從同步指令碼例項

ps 兩個伺服器起好後最好兩個服務都重啟一下 bin bash dns主從同步 主伺服器 rpm q bindif ne 0 then yum install bind y systemctl start named fi 判斷dns服務是否安裝 read p 網域名稱 請帶字尾 yu quanju...

六 Shell指令碼高階程式設計實戰第六部

一 寫乙個start nginx指令碼,當啟動 停止 重啟時利用系統函式模擬實現系統指令碼啟動的特殊顏色效果 用if實現 bin sh etc init.d functions if ne 1 then echo usage 0 exit 1 fi if 1 start then action st...