Shell 七 陣列變數

2021-10-24 04:39:25 字數 3981 閱讀 1307

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

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

方法一: 一次賦乙個值 陣列名[下標]=變數值

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指令碼也可以定義...