普通陣列:只能用整數作為陣列的索引–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中,用括號來表示陣列,陣列元素用...