從未寫過腳本我的最近接了倆腳本的需求,就在這分享一下我的我學到基礎知識主要就四部分内容
一、變量
變量的定義
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