一、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