一、shell函數:就是把一段代碼整理到一個小單元中,並給這個小單元起一個名字,當用到這段代碼的時候直接調用這個小單元的名字便可:python
#一段代碼的擴展集合:是一個子shell,定義完後能夠引用它:shell
格式:function後是函數的名字,而且function這個單詞是能夠省略掉的,花括號{}裏面爲具體的命令:數組
function f_name() { command }
1:案例1: 打印參數:bash
[root@localhost_01 shell]# cat function.sh #!/bin/bash function inp(){ echo $1 $2 $3 $0 $# } inp b a 2 3 adf
[root@localhost_01 shell]# sh -x function.sh + inp b a 2 3 adf + echo b a 2 function.sh 5 b a 2 function.sh 5
註釋:如上函數的意義:直接寫在腳本里,能夠直接調用:服務器
$1:表示第一個參數:架構
$2:表示第二個參數:函數
$3:表示第三個參數:工具
$0:表示變量自己:code
$#:表示總共有幾個參數:blog
案例2:用於定義加法的函數,shell中定義的函數,必需要放到上面.在調用這個函數的時候,函數尚未定義,就會報錯,想要調用哪個函數,就必須在調用語句以前,先定義這個函數.
[root@localhost_01 shell]# cat funciton1.sh #!/bin/bash sum(){ s=$[$1+$2] echo $s } sum 1 10 [root@localhost_01 shell]# sh -x funciton1.sh + sum 1 10 + s=11 + echo 11 11
案例3:輸入網卡的名稱,而後會顯示IP地址:
[root@localhost_01 shell]# cat fun3.sh #!/bin/bash ip(){ ifconfig |grep -A1 "$1:\ "|tail -1|awk '{print $2}' } read -p "Please input the eth name: " eth ip $eth
註釋:grep -A1 "eth0:\ "表示過濾出匹配的行及下面的一行:
[root@localhost_01 shell]# ifconfig |grep -A1 "eth0:\ " eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500 inet 192.168.149.130 netmask 255.255.255.0 broadcast 192.168.149.255 [root@localhost_01 shell]# ifconfig |grep -A1 "eth0:\ "|tail -1 inet 192.168.149.130 netmask 255.255.255.0 broadcast 192.168.149.255 [root@localhost_01 shell]# ifconfig |grep -A1 "eth0:\ "|tail -1|awk '{print $2}' 192.168.149.130 [root@localhost_01 shell]# ifconfig |grep -A1 "eth0:\ "|awk '/inet/ {print $2}' 192.168.149.130
案例4:判斷是否爲本機網卡,輸入的網卡是否有IP:
[root@localhost_01 shell]# cat fun4.sh #!/bin/bash ip() { a=`ifconfig|grep -A1 "$eth: "|tail -1|awk '{print $2}'` if [ -z "$a" ] then echo "沒有這個網卡:" exit fi echo $a } read -p "Please input the eth name: " eth myip=`ip $eth` echo "$eth addrss $myip"
[root@localhost_01 shell]# cat fun8.sh #!/bin/bash myip() { ifconfig | grep -A1 "$1: " | awk '/inet/ {print $2}' } while : do read -p "please input the eth name:" e n=`ifconfig | grep "$e: "` if [ -z $e ] then echo You must input your eth name. elif [ -z "$n" ]; then echo $e is not exist,you need input the right eth name. continue else break fi done echo your eth is $e myip1=`myip $e` if [ -z "$myip1" ] then echo "$e doesn't have IP." else echo "$e ip address $myip1" fi
四、shell中的數組:一串字符串,一串數字造成的變量,咱們把這個變量叫作數組:
定義數組:
定義數組:a=(1 2 3 4 5);echo ${a[@]}
echo ${#a[@]} 獲取數組的元素個數
echo ${a[2]} 讀取第三個元素,數組從0開始:
echo ${a[*]} 顯示整個數組,等同於echo ${a[a]}
[root@localhost_01 shell]# a=(1 2 3) #定義數組 [root@localhost_01 shell]# echo ${a[@]} #打印數組1 1 2 3 [root@localhost_01 shell]# echo ${a[*]} #打印數組2 1 2 3
註釋:echo ${a[@]}等同於echo ${a[*]},理解爲打印數組的全部內容,@和*都表示全部內容:
[root@localhost_01 shell]# echo ${a[@]} 1 2 3 [root@localhost_01 shell]# echo ${a[2]} 3
註釋:表示打印第二個元素,第0個就表示第一個,第一個就表示第二個.....(數組就是從0 開始的)
獲取元素的個數: echo ${#a[@]}
[root@localhost_01 shell]# echo ${a[@]} 1 2 3 [root@localhost_01 shell]# echo ${#a[@]} 3
數組賦值:素的賦值 或更改覆蓋:
[root@localhost_01 shell]# echo ${a[@]} 1 2 3 [root@localhost_01 shell]# a[3]=aaa #賦值: [root@localhost_01 shell]# echo ${a[@]} 1 2 3 aaa [root@localhost_01 shell]# a[3]=100 #賦予新的值: [root@localhost_01 shell]# echo ${a[*]} 1 2 3 100
數組刪除:unset b[3]
[root@localhost_01 shell]# echo ${a[*]} 1 2 3 100 [root@localhost_01 shell]# unset a[3] [root@localhost_01 shell]# echo ${a[@]} 1 2 3 [root@localhost_01 shell]# unset a [root@localhost_01 shell]# echo ${a[@]}
數組分片:能夠用seq來定義數字:
[root@localhost_01 shell]# a=(`seq 1 10`) [root@localhost_01 shell]# echo ${a[@]} 1 2 3 4 5 6 7 8 9 10
截取數字4到7這四個數字: 截取數字從倒數3開始的四個數字和兩個數字:
[root@localhost_01 shell]# echo ${a[@]:3:4} #截取數字4到7: 4 5 6 7 [root@localhost_01 shell]# echo ${a[@]:0-3:4} #截取數字倒數3開始的四個這數字: 8 9 10 [root@localhost_01 shell]# echo ${a[@]:0-3:2} #截取數字倒數3開始的兩個這數字: 8 9
數組替換:數組的替換和sed替換相似:
數組的8替換成6:
[root@localhost_01 shell]# echo ${a[@]} 1 2 3 4 5 6 7 8 9 10 [root@localhost_01 shell]# echo ${a[@]/8/6} 1 2 3 4 5 6 7 6 9 10
直接賦值(須要用括號括起來)
[root@localhost_01 shell]# echo ${a[@]} 1 2 3 4 5 6 7 8 9 10 [root@localhost_01 shell]# a=(${a[@]/8/6}) [root@localhost_01 shell]# echo ${a[@]} 1 2 3 4 5 6 7 6 9 10
告警系統需求分析:
需求:使用shell定製各類個性化工具,但須要統一化管理,規範化管理:
思路:指定一個腳本包,包含主程序,子程序,配置文件,郵件引擎,輸出日記等:
主程序:做爲整個腳本的入口,是整個系統的命脈:
子程序:真正的監控腳本,用來監控各個指標:
配置日記:是一個控制中心,用它來開關各個子程序,指定各個相關聯的日記文件:
郵件引擎:是由一個python程序來實現,定義發郵件的服務器,發郵件人以及發件人的密碼:
輸出日記:真個監控系統要有日記輸出:
程序架構:
bin 下是主程序:
conf 下是配置文件:
shares 是各個監控腳本:
mail 是郵件引擎:
log 是日記: