04-Shell 编程之数组

1、shell中的数组

1.1、为什么会产生Shell数组

通常在开发Shell脚本时,定义变量采用的形式为 “a=l;b=2;C=3”,可如果有多个变量呢?这时再逐个地定义就会很费劲,并且要是有多个不确定的变量内容,也会难以进行变量定义,此外,快速读取不同变量的值也是一件很痛苦的事情,于是数组就诞生了,它就是为了解决上述问题而出现的。

1.2、什么是Shell数组

Shell的数组就是一个元素集合,它把有限个元素(变量或字符内容)用一个名字来命名,然后用编号对它们进行区分。这个名字就称为数组名,用于区分不同内容的编号就称为数组下标。组成数组的各个元素(变量)称为数组的元素,有时也称为下标变量。

1.3、数组中的增删改查

数组的定义

1
2
3
4
5
6
7
8
# 定义数组
[lepeng@centos ~]# stu=(001 002 003)
# 打印数组
[lepeng@centos ~]# echo ${stu[@]}
001 002 003
# 显示数组长度
[lepeng@centos ~]# echo ${#stu}
3

查: 遍历数组的内容

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
# 打印数组内容(通过数组下标或索引)
[lepeng@centos ~]# echo ${stu[0]}
001
[lepeng@centos ~]# echo ${stu[1]}
002
[lepeng@centos ~]# echo ${stu[2]}
003
[lepeng@centos ~]# echo ${stu[3]}

# 遍历数组
# 方法一
[lepeng@centos ~]# for i in ${stu[@]};do echo $i ;done
001
002
003
# 方法二
[lepeng@centos ~]# array=(1 2 3)
[lepeng@centos ~]# for i in `eval echo {1..${#array[@]}}`;do echo ${array[i-1]};done
1
2
3

增:数组添加

1
2
3
[lepeng@centos ~]# stu[3]=004
[lepeng@centos ~]# echo ${stu[@]}
001 002 003 004

改:数组修改

1
2
3
[lepeng@centos ~]# stu[2]=000
[lepeng@centos ~]# echo ${stu[@]}
001 002 000 004

删:数组删除

1
2
3
4
5
[lepeng@centos ~]# unset stu[2]
[lepeng@centos ~]# echo ${#stu[@]}
3
[lepeng@centos ~]# echo ${stu[@]}
001 002 004

1.4、将命令的结果赋值给数组

1
2
dir=(`ls`)
dir=($(ls))

命令定义数组

1
2
3
[lepeng@centos ~]# COM=(`ls`)
[lepeng@centos ~]# echo ${COM[@]}
bianliang.sh case cfb.sh

1.5、数组定义格式

1
2
3
4
5
6
[lepeng@centos ~]# a=(1 2 3 )
[lepeng@centos ~]# b=(1 2 3 4 )
[lepeng@centos ~]# echo ${a[@]}
1 2 3
[lepeng@centos ~]# echo ${b[@]}
1 2 3 4

1.6、数组的本质就是一个变量,只是这个变量存了多个值

1
2
3
${array[@]}     所有元素
${#array[@]} 数组长度
${array[i]} 单个元素,i是下标

1.7、【练习题】批量检查多个网站地址是否正常

要求:

1
2
3
4
5
6
7
使用shell数组方法实现,检测策略尽量模拟用户访问。
10秒钟做一次所有的检测,无法访问的输出报警。
待检测的地址如下
http://www.cnblogs.com/clsn/
http://blog.znix.top
http://blog.nmtui.com
http://10.0.0.7

脚本内容:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
[lepeng@centos ~]# cat check_url.sh 
#!/bin/bash
#
url=(
http://www.cnblogs.com/clsn/
http://blog.znix.top
http://blog.nmtui.com
http://10.0.0.7
)
while true
do
for i in ${url[@]}
do
#curl $i &>/dev/null
a=$(curl -I -w "%{http_code}\n" -o /dev/null -s $i)
if [ $a -ne 200 ]
then
echo "$url 异常"
fi
done
sleep 10
done

04-Shell 编程之数组
https://flepeng.github.io/021-Shell-04-Shell-编程之数组/
作者
Lepeng
发布于
2016年1月1日
许可协议