您的位置:首页 > 运维架构 > Shell

shell脚本中 数组的基本用法

2020-02-07 15:41 225 查看

在shell脚本中,数组 也是一种常用的数据结构,这篇文章简单 说一下 数组的基本用法.


1 数组的声明

这样就可以 声明 arr  ,和 iplist 的数组

#数组的声明
# 用 declare -a variable 语句来清楚地指定一个数组
# 声明一个数组
declare  -a  arr
declare  -a  iplist

2 数组的 定义,赋值

# 数组的定义
arr=(1 2 3 4 5 6 7 8 9)
iplist=(
10.130.2.20
10.130.2.21
10.130.2.22
10.130.2.23
10.130.2.24
10.130.2.25
10.130.2.26
10.130.2.27
10.130.2.28
10.130.2.29
)

#数组的 赋值
arr[0]=zero
arr[1]=one这里赋值请注意,如果 arr[0] 已经有值 会被覆盖。此时 arr0 = zero 

3 求数组的长度

# 求数组 长度 2中方式
length=${#arr[@]}
length1=${#arr[*]}
echo "length:$length"
echo "length1:$length1"

4 遍历数组

# 遍历数组 有两种方式
# 1)遍历数组
for(( i=0;i<${#arr[@]};i++))
do
echo ${arr[i]}
done

# 2)遍历数组
echo ${arr[@]}

  2017年 09月 19日 星期二 09:29:33  补充:

4-1  数据的遍历 好像 还有其他的两种方式

#!/bin/sh

iplist=(
10.130.2.20
10.130.2.21
10.130.2.23
10.130.2.24
10.130.2.25
10.130.2.26
10.130.2.27
10.130.2.28
10.130.2.29
10.130.2.30
)

for ip in iplist[∗]</span><spanclass="hljs−keyword">do</span><spanclass="hljs−builtin">echo</span><spanclass="hljs−variable">{iplist[*]}</span> <span class="hljs-keyword">do</span> <span class="hljs-built_in">echo</span> <span class="hljs-variable">iplist[∗]</span><spanclass="hljs−keyword">do</span><spanclass="hljs−builti​n">echo</span><spanclass="hljs−variable">ip

done

echo “----------------------------”
for ip in iplist[@]</span><spanclass="hljs−keyword">do</span><spanclass="hljs−builtin">echo</span><spanclass="hljs−variable">{iplist[@]}</span> <span class="hljs-keyword">do</span> <span class="hljs-built_in">echo</span> <span class="hljs-variable">iplist[@]</span><spanclass="hljs−keyword">do</span><spanclass="hljs−builti​n">echo</span><spanclass="hljs−variable">ip

done这样 也是可以 遍历shell 中的数组的.



5  单独 取某个值,数组下标从 0 开始 

 这里取下标为 1  3 的值

echo ${arr[1]}
echo ${arr[3]}

6    1) 删除 数组的某个值,这里要注意一点, shell 中的数组特点。

### 测试删除 数组###
#!/bin/bash
curDir=$(cd "$(dirname "${BASH_SOURCE[0]}")"; pwd); #当前绝对路径
function  printarr()
{
for((i=0;i<${#arr[@]};i++))
do
echo "index:$i  , ${arr[i]}"
done
}

# 数组的定义
#arr=(0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 )
arr=(0 1 2 3 4 5 6 7 8 9 10 11 12 )

# 求数组 长度
length=KaTeX parse error: Expected '}', got '#' at position 2: {#̲arr[@]}</span> …{#arr[@]}"
# 删除 数组 元素
unset arr[0]
echo “arr0 : arr[0]</span>"</span><spanclass="hljs−builtin">echo</span><spanclass="hljs−string">"arr2:<spanclass="hljs−variable">{arr[0]}</span>"</span> <span class="hljs-built_in">echo</span> <span class="hljs-string">"arr2 : <span class="hljs-variable">arr[0]</span>"</span><spanclass="hljs−builti​n">echo</span><spanclass="hljs−string">"arr2:<spanclass="hljs−variable">{arr[2]}”
unset arr[3]
echo “arr3 : arr[3]</span>"</span><spanclass="hljs−builtin">echo</span><spanclass="hljs−string">"lengthafter:<spanclass="hljs−variable">{arr[3]}</span>"</span> <span class="hljs-built_in">echo</span> <span class="hljs-string">"length after: <span class="hljs-variable">arr[3]</span>"</span><spanclass="hljs−builti​n">echo</span><spanclass="hljs−string">"lengthafter:<spanclass="hljs−variable">{#arr[@]}”
printarr

来看一下 结果


在shell 脚本 发现 删除 数组后, 对应"位置" 会被保留,而是 向数据结构里面 那样, 里面依次前移,来填补空缺位置,在shell 删除 数组, 把值 删除了, 但是对应的“位置”会留着。 之后 还可以在位置让填充 其他的值
arr[0]=0
arr[3]=3
echo "-------------------"
printarr


这里 重新 又被赋值成功了。

 2)删除整个数组 

# 删除整个数组
unset arr

7  1)数组的分片 

${arr[@]:number1:number2}
这里 number1 从下标number1 开始取值, number2 往后取几个元素,即取到的新的数组的长度

arr=(1 2 3 4 5 6 7 8 9 10  11  12 13)

echo “{arr[@]:0:3} — ${arr[@]:0:3}”
# 1 2 3

echo “{arr[@]:3:5} — ${arr[@]:3:5}”
# 4 5 6 7 8

echo “{arr[@]:5:4} — ${arr[@]:5:4}”
# 6 7 8 9


2) 数组赋值,分片之后赋值,将分片后的数组,重新赋值给新的数组

newarr=(${arr[@]:0:3})

for(( i=0;i<KaTeX parse error: Expected '}', got '#' at position 2: {#̲newarr[@]}</spa…{newarr[i]}
done


总结:  本文介绍了数组的最基本的用法,也是shell脚本中数组经常用到的。

  • 点赞
  • 收藏
  • 分享
  • 文章举报
站内首发文章 山外小楼昨夜又东风 发布了7 篇原创文章 · 获赞 1 · 访问量 337 私信 关注
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: