天天看點

shell基礎知識---與監聽伺服器長連接配接端口狀态

從未寫過腳本我的最近接了倆腳本的需求,就在這分享一下我的我學到基礎知識主要就四部分内容

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]}"
      
shell基礎知識---與監聽伺服器長連接配接端口狀态

執行結果如上

②擷取數組中所有元素和長度

myArray=(a b c d)

echo "數組元素個數為: ${#myArray[*]}"
echo "數組元素個數為: ${#myArray[@]}"
echo "數組的元素為: ${my_array[*]}"
echo "數組的元素為: ${my_array[@]}"
      
shell基礎知識---與監聽伺服器長連接配接端口狀态

③ 數組的周遊

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基礎知識---與監聽伺服器長連接配接端口狀态

知道如何擷取端口狀态我們就要用shell 來實作了。

指令用 `來包裹就是鍵盤上tab鍵上面那個鍵。我們來試試看

shell基礎知識---與監聽伺服器長連接配接端口狀态

這樣我們就能拿到想要的端口資訊了。

四、條件判斷

條件測試的表達式:

    [ 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