从未写过脚本我的最近接了俩脚本的需求,就在这分享一下我的我学到基础知识主要就四部分内容

一、变量

变量的定义

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[]=value0 arrayName[]=value1
arrayName[]=value2 #特定元素赋值
ages=([]= []= []=)

注意:变量声明赋值时=与值之间不允许有空格

、变量的使用

变量使用

使用一个定义过的变量,只要在变量名前面加美元符号$即可,如:

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循环

 for(( i=;i<${#array[@]};i++)) do
#${#array[@]}获取数组长度用于循环
echo ${array[i]};
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循环法

 i=
while [ $i -lt ${#array[@]} ]
#当变量(下标)小于数组长度时进入循环体
do
echo ${ array[$i] }
#按下标打印数组元素
let i++
done

四、命令执行

  到这里你还记得我们的最初是想干啥的吗?监控长连接端口状态。

查看端口状态的命令  【更多解释查看菜鸟教程】

 netstat [-acCeFghilMnNoprstuvVwx][-A<网络类型>][--ip]

知道如何获取端口状态我们就要用shell 来实现了。

命令用 `来包裹就是键盘上tab键上面那个键。我们来试试看

这样我们就能拿到想要的端口信息了。

四、条件判断

条件测试的表达式:
    [ expression ]  括号两端必须要有空格
    [[ expression ]] 括号两端必须要有空格
 
组合测试条件:
-a: and
-o: or

判断比较一般在if中使用,if的使用如下

 if 判断条件;then
#执行内容
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

shell基础知识---与监听服务器长连接端口状态的更多相关文章

  1. Linux Shell 基础知识(一)

    1. 本文知识结构 2. shell 基础知识 2.1 shell 简单介绍 ​ GNU bash shell 能提供对 Linux 系统的交互式访问,一般来说,使用快捷键 Ctrl + Alt + ...

  2. Linux shell基础知识(上)

    Linux shell基础知识(上) 目录 一.shell介绍 二.命令历史 三.命令补全和别名 四.通配符 五.输入输出重定向 六.管道符和作业控制 七.shell变量 八.环境变量配置文件 九.b ...

  3. 基于Zookeeper实现客户端动态监听服务器上下线

    一.在具体实现之前,先来了解一下Zookeeper的监听器的原理: 图中Main()线程作为客户端,当在主线程中创建Zookeeper客户端时,会默认创建两个子线程:Listener和connect, ...

  4. Linux下安装oracle遇到启动监听服务器启动失败

    1.发现监听服务器没有启动,则  lsntctl start 启动监听服务器: 2.发现TNS-12555问题: 3.查找TNS-12555错误,找到一个满意的答案: chmod  777 /var/ ...

  5. Jmeter无法监听服务器4444端口

    阿里云服务器开放了4444端口 jmeter还是无法监听: 解决方法: 阿里云安全组添加端口5555 服务器中启动监听插件使用5555端口,使用命令:java -jar ./CMDRunner.jar ...

  6. 为什么有监听socket和连接socket,为什么产生两个socket

    为什么有监听socket和连接socket,为什么产生两个socket 先看一半的socket建立连接的双方的过程: 客户端: socket()---->创建出 active_socket_fd ...

  7. Android开发——监听Android手机的网络状态

    0. 前言 在Android开发中监听手机的网络状态是一个常见的功能,比如在没网的状态下进行提醒并引导用户打开网络设置,或者在非wifi状态下开启无图模式等等.因此本篇将网上的资料进行了整理总结,方便 ...

  8. Android 监听 Android中监听系统网络连接打开或者关闭的实现代码

    本篇文章对Android中监听系统网络连接打开或者关闭的实现用实例进行了介绍.需要的朋友参考下 很简单,所以直接看代码 复制代码 代码如下: package xxx; import android.c ...

  9. mqtt实现自动监听服务器消息

    本示例借助meteor的一个环境跑,和我们平时用的node自己搭的环境或java,php的环境本质一样,在此不多讨论. 首先需求是:多系统对接进行消息实时传递. 安装好mqtt:  npm insta ...

随机推荐

  1. Apache服务器运维笔记(1)----运行多个Apache服务器

    所有的Apache管理员都会遇到一个问题,就是在一台物理系统上运行多个版本的Apache服务器,或是运行多个同一版本的Apache服务器的副本,对于前者,在编译时为不同版本的Apache指定不同的安装 ...

  2. SpringBoot开发(改变环境属性、读取资源文件、Bean 配置、模版渲染、profile 配置)

    1.概念 SpringBoot 开发深入 2.具体内容 在之前已经基本上了解了整个 SpringBoot 运行机制,但是也需要清楚的认识到以下的问题,在实际的项目开发之中,尤其是 Java 的 MVC ...

  3. 二维码Zxing&Zbar

    二维码Zxing&Zbar 前言:该项目主要介绍了二维码扫描.闪光灯开启.本地二维码图片识别.二维码生成.分别是zxing和zbar(网格二维码)分别实现,具体效果运行项目apk... 开发环 ...

  4. idea 多项目部署碰到的问题

    在使用idea部署多个maven项目的时候,出现了各种坑.一天的时间有一半的时间花在了部署环境.运行环境上.把遇到的坑记录下 1.引入maven的依赖包 当项目多的时候,为了加速项目的开发,习惯性的把 ...

  5. mysql中通过my.cnf设置默认字符集utf-8

    选项配置 配置文件路径:/full/path/mysql/bin/my.cnf (默认为/etc/my.cnf ) [client] default-character-set=utf8 [mysql ...

  6. YII2.0安装教程,数据库配置前后台 [ 2.0 版本 ]

    1.首先下载yii-advanced-app-2.0.6.tgz 2.解压到D:\wamp\www\yii2目录下面将目录advanced下所有文件剪切到 D:\wamp\www\yii2 3.打开c ...

  7. Jenkins在deploy maven artifact时报Peer not authenticated.

    这是一起由Nexus证书导入错误造成的Jenkins运行异常. 最近,同事修改了Nexus服务器的host name,结果导致Jenkins里的任务全都执行不了了.虽然job的配置都已经更新指向新的N ...

  8. 使用Vaadin的maven archetype创建一个空Vaadin项目

    所在公司要求使用这个臭屎粑粑一样的Vaadin,我也没办法.为了更好地开展工作,对得起老板发给我的工资,就算是臭屎粑粑,也要尽力给他玩儿出花样来. Vaadin针对Eclipse和Netbeans等I ...

  9. June 27th 2017 Week 26th Tuesday

    Happiness takes no account of time. 幸福不觉光阴过. At the beginning of this week, I planned to make some s ...

  10. phonegap 的指南针 api Compass

    一. Compass 介绍方法参数   1.Compass 也就是,常说的指南针,又叫罗盘 2.方法 compass.getCurrentHeading compass.watchHeading co ...