在寫shell指令碼時,有時也希望像c語言那樣去使用陣列,bash是支援一維陣列的。本文主要介紹在shell指令碼中關於陣列的應用,包括陣列的定義、讀取、替換、刪除和複製。類似與c語言,陣列元素的下標由0開始編號。獲取陣列中的元素要利用下標,下標可以是整數或算術表示式,其值應大於或等於0。
在shell中,用括號來表示陣列,陣列元素用「空格」符號分割開。定義陣列的一般形式為:
陣列名=(值1 值2 值3
...)
或者陣列名=(
值1值2
值3...)或者
value1=值1
value2=值2
value3=值3
陣列名[0]=$value1
陣列名[1]=$value2
陣列名[2]=$value3
或者陣列名="值1 值2 值2 ..."
或者陣列名=([0]=值1 [1]=值2 [2]=值3 )
例如:
prov=("hebei"
"shandong"
"qinghai"
"shanxi")
或者
prov=(
"hebei"
"shandong"
"qinghai"
"shanxi"
)
或者通過變數建立陣列
hb="hebei"
sd="shandong"
qh="qinghai"
sx="shanxi"
prov[0]=$hb
prov[1]=$sd
prov[2]=$qh
prov[3]=$sx
或者
prov="hebei shandong qinghai shanxi"
# echo $,把prov變數當作陣列來處理,但陣列元素只有字串本身
或者
prov=( [1]=hebei [2]=shandong [3]=qinghai [4]=shanxi )
可以不使用連續的下標,而且下標的範圍沒有限制。
讀取陣列的格式如下:
$
例如:
echo
$
使用@符號可以獲取陣列中的所有元素,例如:
echo
$
獲取陣列長度的方法與獲取字串長度的方法相同,例如:
length=$
#4或者
length=$
#4或者
length=$
#5或者
prov=$
#5或者
length=$
#5
unset prov[1] # 刪除陣列中第乙個元素
unset prov # 刪除整個陣列
格式如下:
$
例如:
$
# shandong qinghai shanxi
$# hebei shandong
$# shandong qinghai
$#shanxi
格式為:
$
例如:
$
#0315bei shandong qinghai shanxi
for v in
$; do
echo
$v;done
或者
for ((i=0;i<$;i++))
doecho
$done
或者
for p in$do
echo
$pdone
例1 read -a引數,從標準輸入中讀取陣列,再做操作
#!/bin/bash
echo
"please enter the provinces:"
read
-a prov
i=0while [ $i
-lt$ ]
doecho
$done
例2 檢查url位址的指令碼
}check_url例3 實現lvs負載均衡健康檢查及自動剔除和自動加入rs的指令碼
#!/bin/bash
#未測試
done
例4 判斷某個變數是否在陣列中
#!/bin/bash
prov=(qinghai shandong shanxi)
var=xian
[[ $ != $ ]] && echo
'yes' || echo
'no'
Shell中陣列的操作
看一下shell中陣列的幾種操作 定義 遍歷 修改 刪除 引數傳遞操作 shell中對於陣列的定義直接使用 元素之間使用空格隔開即可 array 1 2 3 4 5 array abc def gh 取得陣列的值 取出所有的數值以及取出某個位置上的數值 echo echo echo array 0 ...
shell的陣列操作
shell中陣列的下標預設是從0開始的 1。將字串存放在陣列中,獲取其長度 bin bash str a b n d array str length echo length for i 0 i length i doecho done along along laptop code shell s...
shell陣列操作
一 陣列定義 使用declare a 命令定義陣列 陣列的索引是從0開始計數的 接下來就可以通過操作符為不同索引位置的元素賦值。declare a names names 0 tom names 1 jack在定義陣列的同時,可以同時賦值,用 表示,各元素之間用空格隔開 定義的同時直接賦值 decl...