1.数组介绍
平时定义a=1;b=2;c=3,变量如果多了,再一个个定义很费劲,并且取变量也费劲
简单的说,数组就是各种数据类型的元素按一定顺序排列的集合。
数组就是把有限个元素变量或数据用一个名字命名,然后用编号区分他们的变量的集合。这个名字成为数组名,编号成为数组下标。组成数组的各个变量成为数组的分量,也成为数组的元素,有时也称为下标变量。
由于有了数组,可以用相同名字引用一系列变量,并用数组(索引)来识别它们。在许多场合,使用数组可以缩短和简化程序开发,因为可以利用索引值设计一个循环,高效处理多种情况。
2.数组定义与增删改查
方法1:array=(value1 value2 value3...)
1)数组定义
[root@localhost test]# array=(1 2 3) ==>一对括号表示数组,数组元素用“空格”符号分割开。
2)获取数组的长度
[root@localhost test]# echo ${#array[*]} ==>用${#数组名[*或@]} 可以获得数组长度。
3
[root@localhost test]# echo ${#array[@]}
3
3)打印数组元素,数组的下标从0开始
[root@localhost test]# echo ${array[0]}
1
[root@localhost test]# echo ${array[1]}
2
[root@localhost test]# echo ${array[2]}
3
4)打印所有数组元素
[root@localhost test]# echo ${array[*]}
1 2 3
[root@localhost test]# echo ${array[@]}
1 2 3
范例:利用for循环,打印数组array=(10.0.0.1 10.0.0.2 10.0.0.3)的元素
方法一:
#!/bin/sh
array=(10.0.0.1 10.0.0.2 10.0.0.3)
for ((i=0;i<=${#array[*]};i++))
do
echo ${array[i]}
done
方法二:
#!/bin/sh
array=(10.0.0.1 10.0.0.2 10.0.0.3)
for i in ${array[*]}
do
echo $i
done
5)数组赋值
直接通过数组名[下标]就可以对其进行引用赋值,如果下标不存在,自动添加新一个数组元素,如果存在就覆盖原来的值
[root@localhost test]# array[3]=4 ==>增加数组
[root@localhost test]# echo ${array[@]}
1 2 3 4
[root@localhost test]# array[2]=99 ==>修改数组元素
[root@localhost test]# echo ${array[@]}
1 2 99 4
6)数组删除
直接通过:unset 数组[下标] 可以清除相应的元素,不带下标,清除整个数组
[root@localhost test]# unset array[2] ==>删除下标为2的数组元素
[root@localhost test]# echo ${array[@]}
1 2 4
[root@localhost test]# unset array ==>删除整个数组
7)数组内容的截取和替换(和前面变量子串的替换很像)
截取:
[root@localhost test]# array=(1 2 3 4 5)
[root@localhost test]# echo ${array[@]:1:3} ==>截取下标1到3的数组元素
2 3 4
[root@localhost test]# echo ${array[@]:3:2}
4 5
替换:
[root@localhost test]# echo ${array[@]/5/6} ==>把数组中的5替换成6,临时生效,原数组未修改,和sed类似
1 2 3 4 6
[root@localhost test]# array1=(${array[@]/5/6})
[root@localhost test]# echo ${array1[@]}
1 2 3 4 6
3.把命令结果定义数组的方法
[root@localhost test]# array=($(ls /))
[root@localhost test]# echo ${array[@]}
bin boot dev etc home lib lib64 media mnt opt proc root run sbin srv sys tmp usr var
Shell数组小结:
1、定义
静态数组:array=(1 2 3)
动态数组:array=($(ls))
2、打印:
打印所有元素:${array[@]}或${array[*]}
打印数组长度:${#array[@]}或${#array[*]}
打印单个元素:${array[i]} i是数组的下标
3、循环打印
#!/bin/sh
array=(10.0.0.1 10.0.0.2 10.0.0.3)
for ((i=0;i<=${#array[*]};i++))
do
echo ${array[i]}
done
实例1:利用数组,打印下面这句话中字母数不大于6的单词。
I am good teacher welcome to my training class.
方法一:
[root@localhost ~]# cat array1.sh
#!/bin/sh
array=(I am good teacher welcome to my training class)
for ((i=0;i<=${#array[*]};i++))
do
if ((${#array[i]}<=6));then
echo ${array[i]}
fi
done
实例2:批量检查多个网站地址是否正常?
要求:
①、shell数组方法实现,检测策略尽量模拟用户访问。
②、每10秒钟做一次所有的检测,无法访问的输出报警。
③、待检测的地址如下
http://www.baidu.com
http://www.taobao.com
http://www.qq.com
http://10.0.0.9
分步实现:
1.把URL定义成数组,然后while打印出来
2.编写URL检测脚本
3.组合实现整个案例
浙公网安备 33010602011771号