shell中陣列的操作

2021-08-14 02:41:25 字數 3504 閱讀 2726

在寫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...