平时的定义a=1;b=2;c=3,变量如果多了,再一个一个定义很繁琐,并且取变量值也很累。简单的说,数组就是各种数据类型的元素按一定顺序排列的集合。

数组就是把有限个元素变量或数组用一个名字命名,然后用编号区分他们的变量的集合。这个名字成为数组名,编号成为数组下标。组成数组的各个变量成为数组的分量,也称为数组的元素,有时也称为下标变量。

如果有过用其它语言编程的经历,那么想必会熟悉数组的概念。由于有了数组,可以用相同的名字引用一系列变量,并用数字(索引)来识别它们。在许多场合,使用数组可以缩短和简化程序开发,因为可以利用索引值设计一个循环,高效处理多种情况。

数组定义与增删改查:

数组定义:array=(1 2 3)

获取数组的长度:echo ${#array[@]}  或echo ${#array[*]}

打印数组元素:echo ${array[0]} 或echo ${array[1]}

打印数组所有元素:echo ${array[*]} 或echo ${array[@]}

测试:用数组定义ip地址,然后用for循环打印出来

vim array.sh
array=(
10.1.1.1
10.1.1.2
10.1.1.3
)
for ip in ${array[*]}
do
echo $ip
sleep 1
done
C语言型:
array=(
10.1.1.1
10.1.1.2
10.1.1.3
)
for ((i=0;i<${array[@]};i++))
do
echo ${array[]i}
done

数组赋值:

[root@bqh-118 scripts]# array=(1 2 3)
[root@bqh-118 scripts]# echo ${array[*]}
1 2 3
[root@bqh-118 scripts]# array[3]=4 #增加数组元素
[root@bqh-118 scripts]# echo ${array[*]}
1 2 3 4
[root@bqh-118 scripts]# array[0]=bqh #修改数组元素
[root@bqh-118 scripts]# echo ${array[*]}
bqh 2 3 4

数组删除:直接用unset数组[下标]可以清楚相应的元素,不带下标,清楚整个数组

[root@bqh-118 scripts]# echo ${array[*]}
bqh 2 3 4
[root@bqh-118 scripts]# unset array[0]
[root@bqh-118 scripts]# echo ${array[*]}
2 3 4
[root@bqh-118 scripts]# unset array
[root@bqh-118 scripts]# echo ${array[*]}
 
[root@bqh-118 scripts]#

数组内容的截取和替换:

截取:

[root@bqh-118 scripts]# array=(1 2 3 4 5)
[root@bqh-118 scripts]# echo ${array[*]:1:3}
2 3 4
[root@bqh-118 scripts]# echo ${array[*]:3:2}
4 5

调用方法:${数组名[@或*]:起始位置:长度}

替换:

[root@bqh-118 scripts]# echo ${array[*]/5/6}   #把数组中的5替换成6,临时生效,和sed很像
1 2 3 4 6
[root@bqh-118 scripts]# echo ${array[*]}
1 2 3 4 5

调用方法:${数组名[*或@]/查找字符/替换字符}

-----------------------------------------------------------------------

测试:把系统命令结果作为数组元素,然后一一打印出来

[root@bqh-118 scripts]# array=($(ls))    #或array=($`ls`)
[root@bqh-118 scripts]# echo ${array[0]}
array.sh
[root@bqh-118 scripts]# echo ${array[1]}
bqh.sh
[root@bqh-118 scripts]# echo ${array[*]}
array.sh bqh.sh for.sh nginx nginx1 nginx.sh shoujicz.sh sjyjcx.sh while1_100sum.sh while_rz.sh while.sh while_sjcz.sh
[root@bqh-118 scripts]#

[root@bqh-118 scripts]# vim array1.sh
#!/bin/sh
array=(ls cd pwd chmod charry echo mkdir awk sed grep)
for i in ${array[*]}
do
echo $i
done
echo "==========================="
array1=(ls cd pwd chmod charry echo mkdir awk sed grep)
for ((i=0;i<${#array1[*]};i++))
do
echo ${array1[i]}
done

OK,我们来一个实战测试:

批量检查网站状态(数组for循环方法)

首先拿一个一个网站检查,没问题了在用数组定义批量检测。

我们常用curl、nmap、ping等方式检测,下为curl方法:

[root@bqh-118 scripts]# curl -I www.baidu.com
HTTP/1.1 200 OK
Accept-Ranges: bytes
Cache-Control: private, no-cache, no-store, proxy-revalidate, no-transform
Connection: Keep-Alive
Content-Length: 277
Content-Type: text/html
Date: Wed, 15 May 2019 15:21:10 GMT
Etag: "575e1f6f-115"
Last-Modified: Mon, 13 Jun 2016 02:50:23 GMT
Pragma: no-cache
Server: bfe/1.0.8.18 [root@bqh-118 scripts]# curl -I www.baidu.com 2>/devnull|egrep "200|302"
HTTP/1.1 200 OK
[root@bqh-118 scripts]# curl -I www.baidu.com 2>/devnull|egrep "200|302"|wc -l
1
[root@bqh-118 scripts]# curl -I www.taobao.com 2>/devnull|egrep "200|302"
HTTP/1.1 302 Found
[root@bqh-118 scripts]# curl -I www.taobao.com 2>/devnull|egrep "200|302"|wc -l
1
[root@bqh-118 scripts]#

我们只需要检测状态信息返回值有200或302时就代表网站畅通,反之异常。

单个测试没问题,我们接着写脚本:

[root@bqh-118 scripts]# vim curl.sh
#!/bin/sh
# ******************************************************
# Author : aゞ锦衣卫
# Last modified: 2019-05-15 23:35
# Email : 1147076062@qq.com
# blog : https://www.cnblogs.com/su-root
# Filename : curl.sh
# Description :curl jiance
# ******************************************************
array=(
www.baidu.com
www.kanq.com.cn
www.bqh.com
www.jyw.org
www.taobao.com
www.jd.com
)
for n in ${array[*]}
do
curl=`curl -I -m 3 $n 2>/dev/null|egrep "200|302"|wc -l`
if [ $curl -eq 1 ];then
echo -e "$n \033[32m is ok!\033[0m"
else
echo -e "$n \033[33;5m is not ok!\033[0m"
fi
done

当然还有其它很多方法,这里只介绍了curl。

其它方法:

ping ip地址/域名 #等于0

nmap ip地址 -p 端口|grep open|wc -l #等于1

wget --spider --timeout=10 --tries=2 ip地址 &>/dev/null #返回值等于0

最新文章

  1. android switch语句报错:case expressions must be constant expressions
  2. android 定时任务
  3. xcode8 关闭控制台打印不用信息
  4. pod install 慢
  5. express-7 请求和响应对象(2)
  6. eclipse对项目整理分类
  7. hdu3037 Lucas定理
  8. #Leet Code# Root to leaf
  9. hb_gui配置heartbeat做MariaDB的高可用
  10. 使用echarts,制作色温图
  11. [学习OpenCV攻略][017][ARM9下移植OpenCV]
  12. 【DataMagic】如何在万亿级别规模的数据量上使用Spark
  13. decode-ways(动态规划)
  14. Gradle 学习一
  15. Vista的MBR磁盘签名(Disk Signature) (转帖)
  16. HTTP协议特点
  17. linux shell编程中的数组定义、遍历
  18. KnockoutJs学习笔记(八)
  19. shell脚本用crontab执行和手动执行结果不一致
  20. 某DP题目5

热门文章

  1. 123457123456#0#-----com.threeapp.SuanShuXiaoTianCai01----数学算术小天才
  2. PAT 甲级 1058 A+B in Hogwarts (20 分) (简单题)
  3. ABAP ole操作
  4. Jsoup-基础练习
  5. selenium chromedriver与chrome版本对应表
  6. Hadoop概念学习系列之Hadoop、Spark学习路线
  7. 酒店移动端入住离店日期选择demo(转)
  8. python邮件发送自动化测试报告
  9. 搭建一个超好用的 cmdb 系统
  10. [翻译向] 当flush privileges生效时