shell脚本快速入门之-----数组

时间:2022-07-24
本文章向大家介绍shell脚本快速入门之-----数组,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。

一、数组的含义

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

二、数组的分类

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

三、数组的格式

1、格式解读

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

2、定义一个数组

第一种:直接把要加入数组的元素用小括号括起来,中间用空格分开 num=(11 22 33 44)

第二种:精确的给每一个下标索引定义一个值加入数组,索引数字可以不连续 num=([0]=55 [1]=66 [2]=77 [4]=88)

第三种:先把要加入数组的元素全部先赋值给一个变量,然后引用这个变量加入到数组 list=“11 12 13 14” num=($list)

第四种:可以把命令的结果用小括号括起来添加到数组,那么数组会以空格或者制表符区分每一个元素 num=(cat /etc/passwd)

四、数组的操作

1、读取数组和元素

[root@server myscripts]# arr=(10 20 30 40 50)  //定义了一个arr数组

[root@server myscripts]# echo ${arr[3]}   //查看数组中索引是3的元素
40

[root@server myscripts]# echo ${arr[*]}  //查看数组中所有的元素
10 20 30 40 50

[root@server myscripts]# echo ${arr[@]}   //查看数组中所有的元素,同${arr[*]}
10 20 30 40 50

2、查看当前所有数组

[root@server myscripts]# declare -a
declare -a GROUPS='()'
declare -a PIPESTATUS='([0]="0")'
declare -a arr='([0]="10" [1]="20" [2]="30" [3]="40" [4]="50")'
declare -a num='([0]="55" [1]="66" [2]="77" [4]="88")'

3、查看数组索引

[root@server myscripts]# echo ${!num[*]} 
0 1 2 4
1
2

4、查看数组元素个数

[root@server myscripts]# echo ${#num[*]}
4
1
2

5、替换数组元素

[root@server myscripts]# echo ${num[*]/77/55}   //只是临时替换
55 66 55 88

[root@server myscripts]# echo ${num[*]}
55 66 77 88

6、删除数组

(1)删除数组元素
[root@server myscripts]# unset num[2]   //unset后面跟数组元素的下标
[root@server myscripts]# 
[root@server myscripts]# echo ${num[*]}
55 66 88
[root@server myscripts]# echo ${#num[*]}
3
[root@server myscripts]# echo ${!num[*]}
0 1 3

(2)删除整个数组
[root@server myscripts]# unset num   //后面直接跟数组名即可

[root@server myscripts]# declare -a
declare -a GROUPS='()'
declare -a PIPESTATUS='([0]="0")'
declare -a arr='([0]="10" [1]="20" [2]="30" [3]="40" [4]="50")'

五、数组脚本实例

1、把1-100的数字加入数组(2种方式)

#!/bin/bash
list=`seq 1 100`
num=($list)
echo ${num[*]}

[root@server myscripts]# vim arr3.sh

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

[root@server myscripts]# . arr3.sh 
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100

2、输出1-100以内的奇数

#!/bin/bash
j=0
for ((i=1;i<100;i++))
do
  if [ $[$i%2] -ne 0 ]  #if [ `expr $i % 2` -ne 0 ]这样也可以
  then num[$j]=$i
fi
let j++

done
echo ${num[*]}

3、输出数组中最大的值

[root@server ~]# vim paixu2.sh

#!/bin/bash
arr=(90 20 40 50)
max=${arr[$0]}
for((i=0;i<${#arr[*]};i++))
do
if [ $max -lt ${arr[$i]} ]
then
max=${arr[$i]}
fi
done
echo $max  

[root@server ~]# . paixu2.sh
90

4、根据客户需求加入元素到数组

#!/bin/bash
arr(){
read -p "请存入元素:" n
echo $n >> /opt/text1.txt
list=`cat /opt/text1.txt`
num($list)
echo "数组中的元素:${num[*]}"
}

while :
 do
   read -p "您想要加入元素吗?[Y/N]: " add
     if [ "$add" == "Y" ]
      then
      arr
     elif [ "$add" == "N" ]
      then
        echo "再见!"
     break
     fi
 done

5、把数组中不满足60分的加到60分

#!/bin/bash
num=(90 90 90 50 90 40 50 30)
for ((i=1;i<=${#num[*]};i++))
do
 if [ $[num[$i-1]] -lt 60 ]
then
  num[$i-1]=60
fi
done
echo ${num[*]}

6、删除数组中不足60分的元素

[root@server ~]# vim unset.sh

#!/bin/bash
arr=(70 60 80 40 30 20)
i=0
for v in ${arr[*]};do
        if [ $v -lt 60 ];then
        unset arr[$i]
        fi
        let i++
done
echo ${arr[*]}

[root@server ~]# . unset.sh 
70 60 80