函數就是把一段代碼整理到一個小單元中,起一個函數名字表明這一段代碼。python
當引用到這段代碼,直接調用函數名便可。shell
格式: function 函數名() { //function能夠省略不寫 。函數必須放在最前面,在調用函數的前面 語句代碼 }數組
示例:fun1.shbash
#!/bin/bash input() { echo $1 $2 $0 $# // 函數體內的$1等:表明的是函數的參數 } input 1 a b //調用函數,並附上3個參數 ##運行結果 1 a input 3 //$一、$2是函數的第一第二個參數,$0是函數名,$#是函數參數個數
示例:服務器
#!/bin/bash input() { echo $1 $2 $0 $# // 函數體內的$1等:表明的是函數的參數 } input $1 $2 $3 //不在函數體內的$1等,表明是腳本本身的參數。執行腳本時對腳本要賦值參數:fun1.sh 15 a b ##執行 fun1.sh 15 a b,執行結果是 15 a input 3 //
示例:架構
#!/bin/bash sum(){ s=$[$1+$2] echo $s } sum 1 2 ##運行結果 3
示例:框架
#!/bin/bash ip(){ ifconfig |grep -A1 "$1 "|tail -1 |awk '{print $2}'|awk -F ':' '{print $2}' } read -p "please input the eth name: " e //輸入網卡的名字 myip='ip $e' //顯示網卡ip echo "$e address is $myip"
一串數字或一串字符串的形式,造成一個變量函數
定義數組:工具
a=(1 2 3 4 5 6) echo ${a[@]} //@、*均可以打印數組全部元素
取數組的元素:日誌
echo ${a[2]} //數組第三個元素,從0算起:a[0] a[1] a[2] echo ${#a[@]} //數組的元素個數
數組元素賦值、覆蓋
a[1]=100 echo ${a[@]} a[5]=2 echo ${a[@]} //若是下標不存在,則自動添加一個元素
刪除數組:
unset a unset a[1]
數組分片:截取某幾個元素
a=('seq 1 10') echo ${a[@]:0:3} //從第1個元素開始,取3個元素 echo ${a[@]:1:4} //從第2個元素開始,取4個元素 echo ${a[@]:0-3:2} //從倒數第3個元素開始,取2個元素
數組替換
echo ${a[@]/3/100} a=(${a[@]/3/100})
做爲一個shell項目,告警系統是zabbix外的一個定製化需求
需求:使用shell定製各類個性化的告警工具,須要統一化管理、規範化
思路:指定一個腳本包,包含主程序、子程序、配置文件、郵件引擎、日誌系統等
主程序:整個腳本的入口,整個系統的命脈 配置文件:控制中心,來開關各個子程序,指定各個相關聯的日誌文件 子程序:纔是真正的監控腳本,監控各項指標 郵件引擎:由python程序實現,定義發郵件的服務器,發件人,密碼等。 日誌文件:整個監控系統要有日誌輸出到日誌文件裏
要求:被監控的機器角色多種多樣,全部機器上部署同樣的監控系統,無論什麼機器整個監控程序的框架是一致的,不一樣角色定製不一樣的配置文件
程序架構:
主目錄mon:包含子目錄bin、conf、shares、mail、log 子目錄bin:主程序腳本 main.sh 子目錄conf:配置文件 mon.conf 子目錄shares:監控子腳本 load.sh 502.sh 子目錄mail:郵件引擎文件 mail.py mail.sh 子目錄log:日誌文件 mon.log err.log