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 3
| [lepeng@centos ~]# COM=(`ls`) [lepeng@centos ~]# echo ${COM[@]} bianliang.sh case cfb.sh
|
1.5、数组定义格式
1 2 3 4 5 6
| [lepeng@centos ~] [lepeng@centos ~] [lepeng@centos ~] 1 2 3 [lepeng@centos ~] 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: http: http: http:
|
脚本内容:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
| [lepeng@centos ~] #!/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 a=$(curl -I -w "%{http_code}\n" -o /dev/null -s $i) if [ $a -ne 200 ] then echo "$url 异常" fi done sleep 10 done
|