普通陣列:只能使用整數作為陣列索引
關聯陣列:可以使用字串作為陣列索引
方法一: 一次賦乙個值 陣列名[下標]=變數值
array1[0]
=pear
array1[1]
array1[2]
=orange
array1[3]
=peach
echo
$
方法二: 一次賦多個值
array2=
(tom jack alice)
array3=(`
cat /etc/passwd`
) 希望是將該檔案中的每乙個行作為乙個元數賦 值給陣列 array3
array4=(`
ls /var/ftp/shell/for*`
) //根據每個檔案作為乙個元數賦。
array5=
(tom jack alice "bash shell"
) red=a
blue=b
colors=
($red
$blue
$green
$recolor
) array5=
(1 2 3 4 5 6 7 "linux shell"
[20]
=puppet)
echo
$
declare -a
declare -a array1=
declare -a array2=
'([0]="tom" [1]="jack" [2]="alice")'
echo
$ 訪問陣列中的第乙個元數
echo
$ 訪問陣列中所有元數 等同於 echo
$echo
$ 統計陣列元數的個數
echo
$ 獲取陣列元數的索引
echo
$ 從陣列下標 1 開始
echo
$ 從陣列下標 1 開始,訪問兩個元素
方法一: 通過陣列元數的個數進行遍歷
方法二: 通過陣列元數的索引進行遍歷
申明關聯陣列變數
declare -a ass_array1
declare -a ass_array2
方法一:一次賦乙個值 陣列名[索引]=變數值
ass_array1[index1]
=pear
ass_array1[index2]
ass_array1[index3]
=orange
ass_array1[index4]
=peach
方法二: 一次賦多個值
ass_array2=
([index1]
=tom [index2]
=jack [index3]
=alice [index4]
='bash shell'
)
declare -a declare -a ass_array1=
declare -a ass_array2=
'([index4]="bash shell" [index1]="tom" [index2]="jack" [index3]="alice" )'
訪問陣列元數:
echo
$ 訪問陣列中的第二個元數
echo
$ 訪問陣列中所有元數 等同於 echo
$echo
$ 獲得陣列元數的個數 # echo $ 獲得陣列元數的索引
通過陣列元數的索引進行遍歷
案例一:使用wile將檔案中的數值變為索引的變數值
#!/usr/bin/bash
while
read line
do hosts[++i]
=$line
done
echo
"hosts first: $"
for i in
$ //索引直
doecho
"$i: $" //輸出索引變數值
done
[root@1 ~]
# ./hosts.sh
hosts 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
案例二:使用for迴圈將檔案中的數值變為索引的變數值#/usr/bin/bash
ifs=$'
'for line in
`cat /etc/hosts`
do hosts[++j]
=$line
done
for i in$do
echo
"$i: $"
done
案例三:統計相同數值
使用awk統計
awk -f":"
'' /etc/passwd |
sort
|uniq -c //-f表示分隔符 『』 表示第幾列 nf表示最後一列 |
sort
|uniq -c
43 /bin/bash
1 /bin/sync
1 /sbin/halt
42 /sbin/nologin
1 /sbin/shutdown
cut命令統計
cut -d: -f7 /etc/passwd |
sort
|uniq -c
43 /bin/bash
1 /bin/sync
1 /sbin/halt
42 /sbin/nologin
1 /sbin/shutdown
把統計的物件作為陣列的索引 ***[m]++
[root@1 ~]
# let ***1[1]++
[root@1 ~]
# echo "$"
1[root@1 ~]
# let ***1[1]++
[root@1 ~]
# echo "$"
2
案例四:動態統計埠22連線狀態#!/usr/bin/bash
while:do
unset status //清楚陣列變數 #使用while 如果不刪除陣列數值會累計相加
declare -a status //申請陣列
type=
`ss -an |
grep :22 |
awk''
`for i in
$type
dolet status[
$i]++
done
for j in$do
echo
"$j: $ "
done
sleep 1;
clear
done
[root@1 ~]
# watch -n1 ./conn_tcp_status.sh
Shell 變數與陣列
像其他程式語言一樣,shell語言支援變數賦值操作。shell的變數宣告時沒有型別的概念。而且從某種意義上來說,shell變數不需要宣告,在給變數賦值的同時就指定了變數的型別及變數的值。變數的使用極大地增強了指令碼的靈活性。變數宣告 很簡單,格式是 變數 值 注意在等式的兩邊不能有空格。如果兩邊均有...
linux學習(七 Shell程式設計中的變數
目錄 root localhost vi mytestecho 你想要輸出的內容 執行指令碼的方法 sh 你建立的shell指令碼的名字bash 你建立的shell指令碼的名字開啟乙個子shell去讀取,不需要有執行許可權 或者source 你建立的shell指令碼的名字區別 在當前shell內執行...
變數 shell變數( )
變數型別 執行shell時,會同時存在三種變數 a 區域性變數 在指令碼或命令中定義,僅在當前shell例項中有效,其他shell啟動的程式不能訪問區域性變數。b 環境變數 所有的程式,包括shell啟動的程式,都能訪問環境變數,有些程式需要環境變數來保證其正常執行。必要時shell指令碼也可以定義...