一、数组的概念与组成
数组是存放相同类型数据的集合,数组中可以存放多个值,经常配合循环语句进行使用。
例如:
有一个数组: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:可关闭调节模式