shell基础知识---与监听服务器长连接端口状态
从未写过脚本我的最近接了俩脚本的需求,就在这分享一下我的我学到基础知识主要就四部分内容
一、变量
变量的定义
string='字符串' string="字符串" num=808
string=str
字符串可以用单引号和双引号包裹,也可不包裹。数字话不用引号包裹的话就是一个数值。
变量也可以用来接受语句给变量赋值
file=`ls -l filepath/txt.txt`
上面的语句是接收filepath 下的txt.txt文档
数组的定义
程序中常用的还有数组在 Shell 中,用括号( )
来表示数组,数组元素之间用空格来分隔。由此,定义数组的一般形式为:
arrayName=(ele1 ele2 ele3 ... elen)
#定义方法 my_array=(A B "C" D)
数组的赋值方法有两种
一种是,对下标进行赋值、一种是对指定的元素赋值区别如下
#下标赋值
arrayName[0]=value0
arrayName[1]=value1 arrayName[2]=value2 #特定元素赋值 ages=([3]=24 [5]=19 [10]=12)
注意:变量声明赋值时=与值之间不允许有空格
二、变量的使用
变量使用
使用一个定义过的变量,只要在变量名前面加美元符号$
即可,如:
author="严长生" echo $author echo ${author}
变量名外面的花括号{ }
是可选的,加不加都行,加花括号是为了帮助解释器识别变量的边界。我个人建议是所有变量的使用是都加的{}
数组的使用
①数组的获取
myArray=(A B "C" D) echo "第一个元素为: ${myArray[0]}" echo "第二个元素为: ${myArray[1]}"
执行结果如上
②获取数组中所有元素和长度
myArray=(a b c d) echo "数组元素个数为: ${#myArray[*]}" echo "数组元素个数为: ${#myArray[@]}"
echo "数组的元素为: ${my_array[*]}"
echo "数组的元素为: ${my_array[@]}"
③ 数组的遍历
1、for循环
1 for(( i=0;i<${#array[@]};i++)) do 2 #${#array[@]}获取数组长度用于循环 3 echo ${array[i]}; 4 done;
2、for … in
#遍历(带数组下标): for i in "${!arr[@]}"; do printf "%s\t%s\n" "$i" "${arr[$i]}" done #遍历(不带数组下标): for element in ${array[@]} #也可以写成for element in ${array[*]} do echo $element done
3、While循环法
1 i=0 2 while [ $i -lt ${#array[@]} ] 3 #当变量(下标)小于数组长度时进入循环体 4 do 5 echo ${ array[$i] } 6 #按下标打印数组元素 7 let i++ 8 done
四、命令执行
到这里你还记得我们的最初是想干啥的吗?监控长连接端口状态。
查看端口状态的命令 【更多解释查看菜鸟教程】
1 netstat [-acCeFghilMnNoprstuvVwx][-A<网络类型>][--ip]
知道如何获取端口状态我们就要用shell 来实现了。
命令用 `来包裹就是键盘上tab键上面那个键。我们来试试看
这样我们就能拿到想要的端口信息了。
四、条件判断
条件测试的表达式:
[ expression ] 括号两端必须要有空格
[[ expression ]] 括号两端必须要有空格
组合测试条件:
-a: and
-o: or
判断比较一般在if中使用,if的使用如下
1 if 判断条件;then 2 #执行内容 3 fi
我们可以判断大约有以下几几类
1、整数比较:
-eq 判断两个整数是否相等
-ne 判断两个整数是否不等
-gt 判断一个数是否大于另一个数
-lt 判断一个数是否小于另一个数
-ge 大于或等于
-le 小于或等于
2、字符串比较
== 等于 两边要有空格
!= 不等
> 大于
< 小于
3、文件判断
-z string 判断指定字符是否为空,空着真,非空为假
-n string 判断指定字符串是否为不空,空为假 非空为真
-e file 判断文件是否存在
-f file 判断文件是否为普通文件
-d file 判断指定路径是否为目录
-r file 判断文件对当前用户是否可读
-w file 判断文件对当前用户是否可写
-x file 判断文件对当前用户是都可执行
-z 是否为空 为空则为真
-a 是否不空
五、最后的实现代码
我的实现思路如下
1、遍历获取所有要查询的端口号(我们的端口号在配置文件中)
2、在遍历中遍历查询配置文件中的端口状态为EASTBLISHEN是否存在
3、如果不存在的就说明这个端口异常,我这样判断原因因为可能起这个端口的服务挂了,我们查不到任何状态更别说判断了。我们只能取正常的了。
4、判断异常发送告警给运维
5、我并没对把所有的结果汇总到一起进行发送,因为端口和配置文件有点多,等结果会很慢而且可能把我自己查死了。所以变异异常直接就发了
代码明天我会贴出来。有问题欢迎评论区指正
参考:https://www.cnblogs.com/aaronLinux/p/7074725.html
参考:http://www.runoob.com/linux/linux-comm-netstat.html