shell数组

目录

1.shell数组的定义及分类

   1.数组的定义   

   2.数组的分类

2.数组的定义方式

  1.定义方式

  2.数组格式


1.shell数组的定义及分类

   1.数组的定义   

    (1)数组中可以存放多个值。Bash Shell 只支持一维数组(不支持多维数组)。

    (2)数组元素的下标由0开始

    (3)Shell数组用括号来表示,元素用“空格”符号分割开

    (4)在shell语句中,使用遍历数组的时候,数组格式要写成 ${arr[@]}  或  $ {arr[*]}  。

数组是存放相同类型数据的集合,在内存中开辟了连续的空间,通常配合循环使用哦!

   2.数组的分类

    (1)普通数组:不需要声明直接定义,下标索引只能是整数;
    (2)关联数组:需要用declare -A 声明否则系统不识别,索引可以是字符串。


 

2.数组的定义方式

  1.定义方式

   (1) 直接把要加入数组的元素用小括号括起来,中间用空格分开。

nu=(22 33 44 55)

   

   (2)精确的给每一个下标索引定义一个值加入数组,索引数字可以不连续

num=([0]=77 [1]=55 [2]=33 [3]=99)

     (3)先把要加入数组的元素全部先赋值给一个变量,然后引用这个变量加入到数组。

lisi="11 22 33 44"
num=($lisi)

   (4)可以把命令的结果用小括号括起来添加到数组,那么数组会以空格或者制表符区分每一个元素。

num=(`cat /etc/passwd`)
[root@localhost ~]# echo ${#num[*]}
111
[root@localhost ~]# echo ${num[0]}
root:x:0:0:root:/root:/bin/bash
注意以下特殊方式:
[root@localhost ~]# list[0]=1    //没有定义数组之前也可这样直接定义元素
[root@localhost ~]# 
[root@localhost ~]# echo ${list[*]}
1

[root@localhost ~]# list=([0]=1 [1]=2 [3]=4)    //定义数组时所以可以是不连续的
[root@localhost ~]# echo ${list[*]}
1 2 4
[root@localhost ~]# echo ${!list[*]}       //没有2这个索引,数组元素为3
0 1 3


[root@localhost ~]# ff=(1 2 zhangsan lisi)    //不是同一数据类型的也可定义为一个数组
[root@localhost ~]# 
[root@localhost ~]# 
[root@localhost ~]# echo ${ff[*]}
1 2 zhangsan lisi

2.数组格式

如:arr=(11 22 33 44)
数组名称:arr
数组元素:11,12,12,14,数组元素默认是以空格分隔的
数组长度:4,有4个元素
数组下标:每个数组元素都有一个下标索引,一般从0开始,33是数组第三个元素,但是它的下标索引是2

1.数组的常用操作以及经典案例

(1)读取数组和元素

[root@localhost ~]# fruit=(apple banana orange)   //定义了一个水果的数组
[root@localhost ~]# echo ${#fruit[*]}       //查看这个数组元素的个数,也是数组长度
3
[root@localhost ~]# echo ${!fruit[*]}         //查看这个数组元素的索引
0 1 2
[root@localhost ~]# echo ${fruit[*]}          //查看这个数组的元素
apple banana orange
[root@localhost ~]# echo ${fruit[@]}        //查看这个数组的元素
apple banana orange
[root@localhost ~]# echo ${fruit[0]}         //查看这个数组索引为0的元素
apple

[root@localhost ~]# declare -a | grep fruit      //查看声明的所有变量可以看到数组
declare -a fruit='([0]="apple" [1]="banana" [2]="orange")'

 shell数组_第1张图片

shell数组_第2张图片

(2)元素切片

[root@localhost ~]# arr=(1 2 3 4 5 6 7 8)
[root@localhost ~]# echo ${arr[*]:2:3}     //提取从索引2开始的3个元素
3 4 5
[root@localhost ~]# echo ${arr[*]:2:2}     //提取从2开始的2个元素
3 4
[root@localhost ~]# echo ${arr[*]:0:2}
1 2

shell数组_第3张图片

(3)数组的遍历

#!/bin/bash
a=(1 2 3 4 5 6)
for i in ${a[@]}
do
   echo $i
done

shell数组_第4张图片

(4)定义某一个元素

[root@localhost ~]# fruit[0]=pear
[root@localhost ~]#
[root@localhost ~]# echo ${fruit[*]}
pear banana orange

(5)元素替换

定义或替换某一个元素
[root@localhost ~]# fruit[0]=pear
[root@localhost ~]#
[root@localhost ~]# echo ${fruit[*]}
pear banana orange

[root@localhost ~]# echo ${fruit[*]/banana/ba}   //临时替换
pear ba orange
[root@localhost ~]# echo ${fruit[*]}
pear banana orange

(6)元素删除

[root@localhost ~]# unset fruit[0]
[root@localhost ~]#
[root@localhost ~]# declare -a | grep fruit
declare -a fruit=‘([1]=“banana” [2]=“orange”)’

(7)数组删除和指定下标的值删除

[root@localhost ~]# unset arr

shell数组_第5张图片

shell数组_第6张图片

(8)数组追加元素

   方法一:直接使用下标进行元素的追加

数组名[下标]=变量

[root@localhost ~]# a=(10 20 30 40)
[root@localhost ~]# echo ${a[*]}
10 20 30 40
[root@localhost ~]# a[4]=50
[root@localhost ~]# echo ${a[*]}
10 20 30 40 50
[root@localhost ~]# a[5]=60
[root@localhost ~]# echo ${a[*]}
10 20 30 40 50 60

shell数组_第7张图片

方法二:将数组的长度作为下标进行追加元素 

数组名[${数组名[@]}]=变量名

方法三:使用+=进行追加

数组名+=(变量1 变量2 ...)

(9)查看所有数组—declare -a

shell数组_第8张图片

2.获取数组下标对应的值

数组名=(元素0  元素1  元素2  ……)					定义数组
echo ${数组名[索引值]}							输出数组索引值对应的元素,索引值为从0开始

shell数组_第9张图片

3.冒泡排序

每次对比,确定最后一位【所以我数组长度需要-1】
#!/bin/bash
array=(90 70 82 100 30 66) #定义数组
echo "old_array:${array[*]}" #1.代表排序前的数组

lt=${#array[*]} #数组长度
#定义比较轮数,比较轮数为数组长度-1,从1开始
for ((i=1;i<=$lt;i++))
#当下标为0时for ((i=0;i<$lt;i++))
do
   #确定比较元素的位置,比较相邻的两个元素,较大的数往后放,在比较次数谁比较轮数而减少
    for ((j=0;j<$lt-i;j++))
    do
        #定义第一个元素的值
       first=${array[$j]}
       #定义第二个元素的值
       k=$[$j+1]
       second=${array[$k]}
      #如果第一个元素比第二个元素大,就互换
      if [ $first -gt $second ];then
      #把第一个元素的值保存到临时变量中
       temp=$first
     #把第二个元素赋值给第一个元素
       array[$j]=$second
     #把临时变量赋值给第二个元素
       array[$k]=$temp
   fi
    done
done
echo "new_array:${array[*]}"

shell数组_第10张图片

 

你可能感兴趣的:(linux,数据结构,运维)