Shell-数组

1、数组定义

# 定义
[root@shell ~]# a=(1 2 3 4)

# $a 默认输出数组第一个数
[root@shell ~]# echo $a

# ${a[0]} 数组第一个数 
# ${a[1]} 数组第二个数 
[root@shell ~]# echo ${a[0]}
1
[root@shell ~]# echo ${a[1]}
2

########  组数常用的几个替换方法  ########
# 表示获得全部组数:${A[@]} 或 ${A[*]}
[root@shell ~]# echo ${a[*]}
1 2 3 4
[root@shell ~]# echo ${a[@]}
1 2 3 4

# 表示获得全部组数数量:${#A[@]} 或 ${#A[*]}       
[root@shell ~]# echo ${#a[@]}
4
[root@shell ~]# echo ${#a[*]}
4

# 表示获得第一个组数的长度,依次类推:${#a[0]}
[root@shell ~]# echo ${#a[0]}
1

2、数组读取与赋值

# 定义
[root@shell ~]# a=(1 2 3 4)

# 赋值
[root@shell ~]# a=(1 2 3 4)
[root@shell ~]# echo ${a[*]}
1 2 3 4
[root@shell ~]# a[2]=100
[root@shell ~]# echo ${a[*]}
1 2 100 4

# 删除
[root@shell ~]# a=(1 2 3 4)
[root@shell ~]# unset a
[root@shell ~]# echo ${a[*]}

## 直接通过:unset 数组[下标] 可以清除相应的元素,不带下标,清除整个数据。
[root@shell ~]# a=(1 2 3 4)
[root@shell ~]# unset a[1]
[root@shell ~]# echo ${a[*]}
1 3 4

## 注意:当某个元素删除后,再次读取这个元素就是空。如果a[1]删除后,就第二个元素2删除了,再次读取a[1]就是空,并不是新的第二个元素3。
[root@shell ~]# echo ${a[1]}

[root@shell ~]# echo ${#a[*]}
3


3、特殊使用

1)分片:
[root@shell ~]# a=(1 2 3 4 5 6 7 8)
[root@shell ~]# echo ${a[@]:0:3}
[root@shell ~]# echo ${a[@]:1:4}
2 3 4 5
[root@shell ~]# c=(${a[@]:1:4})
[root@shell ~]# echo ${#c[@]}
4
[root@shell ~]# echo ${c[*]}
2 3 4 5

# 直接通过 ${数组名[@或*]:起始位置:长度} 切片原先数组,返回是字符串,中间用“空格”分开,因此如果加上”()”,将得到切片数组,上面例子:c 就是一个新数据。

2)替换:
[root@shell ~]# a=(1 2 3 4 5 6 7 8)
[root@shell ~]# echo ${a[@]/3/100}
1 2 100 4 5 6 7 8
[root@shell ~]# echo ${a[@]}
1 2 3 4 5 6 7 8
[root@shell ~]# a=(${a[@]/3/100})
[root@shell ~]# echo ${a[@]}
1 2 100 4 5 6 7 8

# 新赋值时,()代表输出里面的命令结果
[root@shell ~]# a=(echo ${a[@]})    
[root@shell ~]# echo ${a[@]}
echo 1 2 100 4 5 6 7 8
[root@shell ~]# a=(echo ${a[@]})  
[root@shell ~]# echo ${a[@]}
echo echo 1 2 100 4 5 6 7 8

# 调用方法是:${数组名[@或*]/查找字符/替换字符} 该操作不会改变原先数组内容,如果需要修改,可以看上面例子,重新定义数据。

4、 将数组赋给数组

#!/bin/bash
a=(1 2 3)
b=()
for((i=0;i < ${#a[*]};++i ));
do
echo ${a[*]}
b[$i]=${a[$i]}
echo ${b[*]}
#echo ${b[i]}
done
echo ${b[*]}

a=(1 2 3)
b=()
echo ${a[*]}
# 这里实际上是将a=(1 2 3)赋值给了b[0],而不是 a与b 完全一样
b=${a[*]}
echo '#########################'
echo ${b[0]}
echo '#########################'
echo ${b[1]}
echo '#########################'
echo ${b[2]}
b[1]=${a[*]}
echo '#########################'
echo ${b[1]}
echo ${b[*]}
echo ${b[0]}

posted @ 2021-11-29 16:27  Rocky_940120  阅读(50)  评论(0)    收藏  举报