day09:shell函數及數組、告警系統需求分析

一、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  是日記:

相關文章
相關標籤/搜索