1. 程式人生 > >shell實戰訓練營Day9

shell實戰訓練營Day9

shell中的函式
函式就是把一段程式碼整理到一個小單元中,並給這個小單元起名字,當用到這段程式碼的時候,只需要呼叫這個小單元的名字即可。
格式
function f_name()
{
command
}

        其中function 可以省略

舉例1
vim /usr/local/sbin/inp.sh
#!/bin/bash
inp ()   {
      echo $1  $2  $#  $0
            }
inp a b  c    

輸出結果為 a b 3 inp.sh

$# 輸出引數格式 當前為3 $0 輸出shell名稱

舉例2
輸出IP地址
vim /usr/local/sbin/ip.sh
#!/bin/bash
ip () {
ifconfig|grep -A1 "$1" | tail -1 |awk '{print $2}'
}
read -p "please input eth.name:" eth
ip $eth

輸出結果 xxx.xxx.xxx.xxx

shell中的陣列
陣列是一串字元創,一串數字
定義陣列
name=(1 2 3)   name1=(abc  xyz)
輸出整個陣列
echo ${name[@]}     可以使用*號代替@
echo ${#name[@]}   獲取陣列中元素的個數
echo ${name[0]}     獲取陣列中第一個元素    // 陣列計數從0(下標)開始   即0表示第一個元素

陣列的賦值
name[2]=99 將陣列的第三個元素賦值為99,若下標不存在則會自動新增一個元素。
陣列的刪除
unset name[1] 刪除陣列中第二個元素
unset name 清空整個陣列

陣列分片
name = (seq 1 5)
echo ${name[@]:0:3} 從第一個元素開始,擷取三個元素
echo ${name[@]:1:4} 從第二個元素開始,擷取四個元素
echo ${name[@]:0-3:2} 從倒數三個元素開始,擷取二個元素

陣列替換
echo ${name[@]/3/100} 將陣列中的3替換為100
或採用賦值的方法替換
a=(${name[@]/3/100})

告警系統需求分析
需求:使用shell定製各種個性化告警工具,但是需要統一化管理,規範化管理。
思路:指定一個指令碼包,包含主程式、子程式、配置檔案、郵件引擎、輸出日誌等。
主程式:作為整個指令碼的入口,是整個系統的命脈。
配置檔案:是一個控制中心,用它來開關各個子程式,指定各個相關聯的日誌檔案。
子程式:真正的監控指令碼,用來監控各個指標。
郵件引擎:是由一個Python程式來實現,它可以定義發郵件的伺服器,發郵件人,和發件人密碼。
輸出日誌:整個監控系統要有日誌輸出。

Shell專案——告警系統
需求:機器角色多種多樣,但是所有機器上都要部署同樣的監控系統,也就是說所有機器不管什麼角色,整個程式框架都是一樣的,不同的地方在於根據不同的角色,地址不同的配置檔案。

程式架構:

                 bin  ------   [main.sh]

                conf  ------  [mon.conf]

主目錄 shares ------ [ load.sh 502.sh]
(mon)

                mail -------- [  maill.py  mail.sh  ] 

              Log  -------  [  mon.log    err.log ] 

bin 下是主程式
conf 下是配置檔案
shares 下是各個監控指令碼
mail 下是郵件引擎
log 下是日誌