shell 醬紫的陣列

2021-10-12 03:02:15 字數 3883 閱讀 5563

普通陣列:只能用整數作為陣列的索引–0 下標

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

普通陣列定義:

books=

( linux shell awk

sed)

echo

$語法:陣列名[index]

=變數值

#!/bin/bash

area[11]

=23

area[13]

=37

area[51]

="ufo"

定義方法2:

array2=

(tom jack alice)

array3=(`

cat /etc/passwd`

)# 希望是將檔案中的每一行作為乙個值賦給陣列array3

array4=

(tom jack alice "bash shell"

) array5=

(1 2 3 4 5 6 7 "linux shell"

[20]

=saltstack)

#關聯陣列需要提前宣告

declare命令:

[test @test test]

# declare [-選項]

引數說明:

-a :定義為陣列--array

-a : 定義關聯陣列

例1declare -a myarry1

myarry1=

([name]

=soso666 [***]

=man [age]

=18)

echo

$

當設定任何陣列變數時,可以訪問它

aa=

(haha heihei baibai)

echo

$# 訪問陣列中的第乙個元素

echo

$# 訪問陣列中所有的元素 等同與echo $

echo

$# 統計元素的個數

echo

$# 列印索引

您可以訪問陣列中的所有專案通過以下方式之一:

$

$

示例

[root@linux-server script]

# vim shuzu1.sh

#!/bin/sh

name[0]

="bj"

name[1]

="sh"

name[2]

="sz"

name[3]

="gz"

name[4]

="hz"

echo

"$"echo

"$"

輸出結果

[root@linux-server script]

# bash shuzu1.sh

bj sh sz gz hz

bj sh sz gz hz

疑難點

shell陣列中"*" 和 「@」 區別

關於在shell指令碼中陣列變數中 「*」跟 「@」 區別

*當變數加上"" 會當成一串字串處理.

@當變數加上"" 依然當做陣列處理.

在沒有加上"" 的情況下效果是等效的.

示例

[root@linux-server script]

# vim test1.sh

#!/usr/bin/env bash

array=

(gz cloud 19)

echo

"case 1"

for line in

"$"do

echo

$line

done

echo

"case 2"

for line in

"$"do

echo

$line

done

echo

"case 3"

for line in$do

echo

$line

done

echo

"case 4"

for line in$do

echo

$line

done

執行結果

[root@linux-server script]

# bash test1.sh

case 1

gzcloud

19case 2

gz cloud 19

case 3

gzcloud

19case 4

gzcloud

19

遍歷陣列---while---處理行比較擅長,不管有沒有空格都是一行

將乙個檔案中的每一行作為陣列的元素賦值給陣列並遍歷

[root@newrain array]

# cat array01.sh

#!/bin/bash

#++i:是先自加1後賦值;i++:是先賦值後自加1。 i不定義預設值0

while

read line #陣列賦值

do host[i++]

=$line

done

echo

for i in

$#陣列遍歷,建議使用索引遍歷

doecho

"$i:$"

done

遍歷陣列for

[root@newrain array]

# cat array02.sh

#!/bin/bash

#ifs=$'\n'

for line in

`cat /etc/hosts`

do host[j++]

=$line

done

for i in$do

echo

$done

#注意:for迴圈中會將tab\空格\回車作為分隔符預設為空格.

擴充套件: shell 指令碼中有個變數叫ifs(internal field seprator) ,內部域分隔符。ifs是乙個變數,當shell處理"命令替換"和"引數替換"時,shell根據ifs的值,預設是space, tab, newline來拆解讀入的變數,然後對特殊字元進行處理,最後重新組合賦值給該變數。

使用方式:

old_ifs=

$ifs

#先儲存原始值

ifs=

"\n"

#改變ifs的值

......

ifs=

$old_ifs

#如果用的時候在還原ifs的原始值

練習:通過陣列統計shell的種類和數量--/etc/passwd

#把要統計的物件作為陣列的索引,最後對他們的值進行累加--必須為關聯陣列

[root@localhost ~]

# vim count_shells.sh

#!/usr/bin/bash

declare -a shells

while

read line

do type=

`echo $line |

awk -f":"''`

let shells[

$type

]++ #匹配到之後加1

done

< /etc/passwd

for i in$do

echo

"$i: $"

#陣列名加上索引統計出值

done

shell 醬紫的一些判斷

判斷數字 判斷檔案等 獲取路徑中目錄和檔名 條件測試 格式1 test 條件表示式 格式2 條件表示式 格式3 條件表示式 支援正則 z n a 字串1 字串2 x x a bbb if 3 file dir1 dir2 dir3 my.file.txt 拿掉第一條 及其左邊的字串 dir1 dir...

Shell陣列 shell陣列的定義 陣列長度

shell在程式設計方面比windows批處理強大很多,無論是在迴圈 運算。bash支援一維陣列 不支援多維陣列 並且沒有限定陣列的大小。類似與c語言,陣列元素的下標由0開始編號。獲取陣列中的元素要利用下標,下標可以是整數或算術表示式,其值應大於或等於0。在shell中,用括號來表示陣列,陣列元素用...

Shell陣列 shell陣列的定義 陣列長度

shell在程式設計方面比windows批處理強大很多,無論是在迴圈 運算。bash支援一維陣列 不支援多維陣列 並且沒有限定陣列的大小。類似與c語言,陣列元素的下標由0開始編號。獲取陣列中的元素要利用下標,下標可以是整數或算術表示式,其值應大於或等於0。在shell中,用括號來表示陣列,陣列元素用...