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 下是日誌