shell 数组介绍
平时的定义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[*]}
doecho $ipsleep 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/sharray=(ls cd pwd chmod charry echo mkdir awk sed grep)
for i in ${array[*]}
doecho $i
done
echo "==========================="
array1=(ls cd pwd chmod charry echo mkdir awk sed grep)
for ((i=0;i<${#array1[*]};i++))
doecho ${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 ];thenecho -e "$n \033[32m is ok!\033[0m"elseecho -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
shell 数组介绍相关推荐
- Shell笔记9——Shell数组的应用实践
本文主要讲解Shell脚本开发中数组的知识与实践 目录: 1.Shell数组介绍 2.Shell数组的定义与常用实践 3.Shell数组脚本开发实践 4.shell数组的重要命令 5.Shell数组相 ...
- shell 数组及其遍历的3种方法
1.shell数组 1.1.数组概述 数组中可以存放多个值.Bash Shell 只支持一维数组(不支持多维数组),初始化时不需要定义数组大小(与 PHP 类似). 与大部分编程语言类似,数组元素的下 ...
- shell脚本编程学习之路-shell数组
1.数组的介绍 在开发shell脚本时,定义变量采用的形式为"a=1;b=2;c=3",变量多了再一个一个定义就比较麻烦,并且要是有多个不确定的变量内容也会难以进行变量控制,于是为 ...
- linux shell数组深入学习理解
本文为大家介绍linux shell数组的相关知识,并提供了充足的例子供参考,这么好的东东,千万不要错过 bash shell只支持一维数组,但参数个数没有限制. 声明一个数组: declare -a ...
- Linux中Shell数组的笔记
Shell数组的介绍 数组算是一种特殊的数据结构,数据项可以成为数组的元素,可以通过数组的索引获取每一个数组的元素值. 数组的典型的使用场景是把相同类型的元素汇总在一起.由于Shell变量属于弱类型, ...
- Linux Shell脚本入门教程系列之(六)Shell数组
本文是Linux Shell脚本系列教程的第(六)篇,更多shell教程请看:Linux Shell脚本系列教程 Shell在编程方面非常强大,其数组功能也非常的完善,继上一篇之后,今天就为大家介绍下 ...
- linux 关联数组,Linux shell数组与关联数组的用法实例
Linux shell数组与关联数组的用法实例 1. 关联数组 使用 declare -A(declare 的用法请使用 help 进行查看,help declare) 进行声明关联数组变量: $ d ...
- linux数组拼接_Linux中Shell数组的笔记
Shell数组的介绍 数组算是一种特殊的数据结构,数据项可以成为数组的元素,可以通过数组的索引获取每一个数组的元素值. 数组的典型的使用场景是把相同类型的元素汇总在一起.由于Shell变量属于弱类型, ...
- Tessent专栏第二篇:Tessent Shell ETChecker介绍(1续)
系列文章目录 前言 1. Tessent Shell ETChecker与传统ETChecker的对比 1.1 工具比较 1.1.1 TS-ETChecker支持的功能 1.1.2 TS-ETChec ...
最新文章
- 《高性能Linux服务器构建实战》封面照出炉
- Python_03-数据类型
- Win7 64位系统 注册 ocx控件
- 【Flask】CORS同源问题解决
- js function如何传入参数未字符串_Python爬虫 JS 案例讲解:爬取漫画
- 计算机操作员考评标准,计算机操作员职业技能鉴定标准.doc
- 微软给程序代码加的css效果
- HTML框架(Frames)
- php中arraymultisort,php 数组函数array_multisort()用法
- 优秀Java程序员的编程风格
- 利用hutool实现邮件发送功能
- vb.net 使用MD5密碼加密
- 解决Sublime Text 2中文显示乱码问题
- Linux 环境下思源黑体字体与 Java 之间的兼容性问题的解决(补充说明)
- 手游服务器常用架构图
- 网络质量监控 - 守好入口第一关
- 用java实现编译器之代码实现Thompson构造:在简单NFA的基础上构造更复杂的NFA
- Oracle SQL前三行,后三行
- 360加速插件谷歌字体服务停止运行
- 百问网物联网实战-STM32中断