Shell脚本之数组

一、数组的概念与组成

数组是存放相同类型数据的集合,数组中可以存放多个值,经常配合循环语句进行使用。

例如:

有一个数组:num=(15 16 17 18 19)
数组名称:num
数组元素(第1个):11
数组长度:5
数组下标:元素18所对应的下标为3

二、数组的应用场景

  • 获取数组长度
  • 获取元素长度
  • 遍历元素
  • 元素切片
  • 元素替换
  • 元素删除

三、数组定义方法及数组的切片、遍历、替换、删除

Shell 数组用括号来表示,元素用"空格"符号分割开,语法格式如下:

方法一:

数组名=(value0 value1 value2 ...)

例:

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

方法二:

数组名=([0]=value [1]=value2 [2]=value ...)

例:

[root@localhost ~]# num=([0]=15 [1]=16 [2]=17 [3]=18)
[root@localhost ~]# echo ${num[@]}
15 16 17 18

方法三:

列表名:"value0 value1 value2"
数组名=($列表名)

例:

[root@localhost ~]# list="15 16 17 18 19"
[root@localhost ~]# num=($list)
[root@localhost ~]# echo ${num[*]}
15 16 17 18 19

方法四:

数组名[0]="value"
数组名[1]="value"
数组名[2]="value"

数组包括的数据类型:

  • 数值类型
  • 字符类型

例1:使用数组输出1-100

#!/bin/bash
#
for ((i=0;i<=99;i++));do    ## 注意:这里的i代表的含义是数组下标,下标从0开始!
  num[$i]=$[$i+1]
done
echo ${num[*]}

例2:需求:创建任意数字及长度的数组,可以根据需求加入元素

#!/bin/bash
#
i=0
while true
do
  read -p "是否输入元素(yes/no):" a
  if [ $a = no ];then
    break
  fi
  read -p "请输入第$[$i+1]个元素:" b
  num[$i]=$b
  let i++
done
echo ${num[*]}
  • 获取数组长度
${数组名[@/*]}
  • 读取某下标赋值
${数组名[下标]}
  • 数组遍历

例1:遍历数组,找出数组中小于60的值并直接赋予60

#!/bin/bash
score=(88 90 56 24 70 89)
for ((i=0;i<${#score[*]};i++))
do
  if [ ${score[$i]} -lt 60 ];then
    new[$i]=60
  else
    new[$i]=${score[$i]}
  fi
done
echo ${new[*]}

例2:输出数组中最大值

#!/bin/bash
score=(72 88 42 55 90)
temp=0
for ((i=0;i<${#score[*]};i++));do
  if [ ${score[$i]} -gt $temp ];then
    temp=${score[$i]}
  fi
done
echo $temp

例3:将一个数组中的元素由小到大进行排序(又称:冒泡排序)

#!/bin/bash
#
score=(72 63 88 91 45)
for ((i=1;i<${#score[*]};i++));do
  for ((j=0;j<${#score[*]}-i;j++));do
    if [ ${score[$j]} -gt ${score[`expr $j + 1`]} ];then
      tmp=${score[`expr $j + 1`]}
      score[`expr $j + 1`]=${score[$j]}
      score[$j]=$tmp
    fi
  done
done
echo ${score[*]}

数组切片

${数组名[@/*]:起始位置:长度}

例:

[root@localhost ~]# num=(15 16 17 18 19)
[root@localhost ~]# echo ${num[*]:1:3}
16 17 18

数组的替换

${数组名[@/*]/查找字符/替换字符}

例:

[root@localhost ~]# num=(15 16 17 18 19)
[root@localhost ~]# echo ${num[*]/17/20}
15 16 20 18 19

数组删除

unset

例:删除数组中小于60的元素

#!/bin/bash
#
i=0
score=(45 65 70 84 91 33)
for k in ${score[*]} ;do
  if [ $k -lt 60 ];then
    unset score[$i]
  fi
  let i++
done
echo ${score[*]}

四、Shell脚本调试

  • echo命令
  • bash命令

命令语法

sh [-nvx] 脚本名

可选项:-n 不执行,将结果输出;-vx 执行并将结果输出
  • set命令

  • set -x:开启调节模式

  • set +x:可关闭调节模式

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值