• 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	%s
    " "$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

  • 相关阅读:
    数据库连接字符串解析的正则表达式
    .NET 2.0 中的自定义配置处理
    一个三层架构的WinForms程序的完整范例(.NET 1.1/Northwind)
    office2013破解工具
    jQuery中的$extend()介绍
    再次复习数据结构:c语言链表的简单操作
    c语言单链表,冒泡排序
    c语言中双维数组与指针的那点事儿
    CodeDom.CodeArrayCreateExpression不能生成多维数组的创建表达式
    发现Maxthon(myIE2)浏览器处理javascript脚本时的奇怪现象
  • 原文地址:https://www.cnblogs.com/cxh1995/p/10548210.html
Copyright © 2020-2023  润新知