shell中的函數、數組、報警系統腳本

一、shell中的函數shell

函數就是把一段代碼整理到了一個小單元中,並給這個小單元起一個名字,當用到這段代碼時直接調用這 
個小單元的名字便可。
格式: function f_name() {
commond
數組

 函數必需要放在腳本的最前面
案例1:bash

#!/bin/bash
input() {
echo "第一個參數是$1"
echo "第二個參數是$2"
echo "總共有多少個參數 $#"
echo "這個腳本的名字是 $0"
}
read -p "input a num:" n
read -p "input a num:" m
input $n $m
案例2:函數

#!/bin/bash
input() {
echo "第一個參數是$1"
echo "第二個參數是$2"
echo "總共有多少個參數 $#"
echo "這個腳本的名字是 $0"
}
input $1 $2ui

 函數中的運算:
案例1:3d

#!/bin/bash
sum(){
s=$[$1+$2]
echo $s
}
sum $1 $2
案例2:日誌

#!/bin/bash
sum(){
s=$[$1+$2+$3]
echo $s
}
read -p "aaa:" a
read -p "bbb:" b
read -p "ccc:" cblog

sum $a $b $cip

 ip 顯示函數(花了很長時間才把全部的給整合好,尤爲是在輸入數字時,顯示對應的網卡和IP):get

#!/bin/bash
#by yumingzhen
#
echo ""
k=0
for i in `ifconfig | awk '/:/ {print $1}' |grep ":" |sed 's/://g'`
do
z=$i
k=$[$k+1]
m=$k
echo $m=$i
cc=$cc$i:
done
echo "按a show all IP addr"
echo "按q|quit|Q exit"
ip_fun(){
ifconfig |grep -A1 "$id" | awk '/inet/ {print $2}'
}
while :
do
echo ""
read -p "input a num to get ip_add:" n
end=`ifconfig | awk '/:/ {print $1}' |grep ":" |wc -l`
n1=`echo $n |sed 's/[0-9]//g'`
if [ $n == "q" ] || [ $n == "quit" ] || [ $n == "Q" ] ;then
exit 0
elif [ $n == "a" ];then
for a in `seq 1 $end`
do
id=`echo $cc |cut -d':' -f $a`
echo $id=`ip_fun`
done
exit 0
elif [ -n "$n1" ] || [ -z "$n" ] || [ "$n" -gt "$end" ];then
echo "請輸入正確的數字,不大於$end"
continue
fi

id=`echo $cc |cut -d':' -f $n `
echo ""
echo $id IP=`ip_fun`
done

 

二、數組
@ 或 * 號

定義數組 a=(1 2 3 4 5); echo ${a[@]}
echo ${#a[@]} 獲取數組的元素個數 
echo ${a[2]} 讀取第三個元素,數組從0開始
echo ${a[*]} 等同於 ${a[@]} 顯示整個數組
數組賦值
a[1]=100; echo ${a[@]}
a[5]=2; echo ${a[@]} 若是下標不存在則會自動添加一個元素
數組的刪除
uset a; unset a[1]

數組分片
a=(`seq 1 5`)
echo ${a[@]:0:3} 從第一個元素開始,截取3個
echo ${a[@]:1:4} 從第二個元素開始,截取4個
echo ${a[@]:0-3:2} 從倒數第3個元素開始,截取2個
數組替換
echo ${a[@]/3/100}
a=(${a[@]/3/100})

 

三、報警系統主腳本

#!/bin/bash

#Written by aming.
# 是否發送郵件的開關
export send=1
# 過濾ip地址
export addr=`/sbin/ifconfig |grep -A1 "ens33: "|awk '/inet/ {print $2}'`
dir=`pwd`
# 只須要最後一級目錄名
last_dir=`echo $dir|awk -F'/' '{print $NF}'`
# 下面的判斷目的是,保證執行腳本的時候,咱們在bin目錄裏,否則監控腳本、郵件和日誌頗有可能找不到
if [ $last_dir == "bin" ] || [ $last_dir == "bin/" ]; then
conf_file="../conf/mon.conf"
else
echo "you shoud cd bin dir"
exit
fi
exec 1>>../log/mon.log 2>>../log/err.log
echo "`date +"%F %T"` load average"
/bin/bash ../shares/load.sh
#先檢查配置文件中是否須要監控502
if grep -q 'to_mon_502=1' $conf_file; then
export log=`grep 'logfile=' $conf_file |awk -F '=' '{print $2}' |sed 's/ //g'`
/bin/bash ../shares/502.sh
fi

相關文章
相關標籤/搜索