普通陣列:只能使用整數作為陣列索引(列表)
關聯陣列:可以使用字串作為陣列索引 (字典)
一、普通陣列
定義陣列分為兩種方法
方法二:一次賦多個值
二、關聯陣列
陣列分類
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...