Shell脚本中的函数

  • Shell脚本中的函数

  • 函数就是把一段代码整理到一个小单元中,并给这个单元起一个名字,当用到这段代码是直接调用这个单元的名字即可。

  • 格式:function f_name(){

  • Command

  • }

  • 函数必须要放在最前面

  • 示例1

  • #!/bin/bash

  • function input() {

  • #function可以省略

  • echo $1 $2 $# $0

  • }

  • input 1 a b

  • 示例2(算出数字的和)

  • #!/bin/bash

  • sum() {

  • s=$[$1+$2]

  • echo $s

  • }

  • sum 1 2

  • 示例3

  • #!/bin/bash(显示ip)

  • ip() {

  • ifconfig |gerp -A1 “$1” |tail -1 |awk ‘{print $2}’|awk -F’:’ ‘{print $2}’

  • }

  • read -p “please input the eth name:” e

  • myip=’ip $e’

  • echo “$e address is $myip”

  • Shell中的数组

  • 定义数组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[@]}如果下标不存在则会制动添加一个元素。

  • 数组的删除:

  • user 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})

  • 告警系统需求分析

  • 需求:使用shell定制各种个性化告警工具,但需要统一化管理、规范化管理。

  • 思路:指定一个脚本包,包含主程序、子程序、配置文件、邮件引擎、输出日志等。

  • 主程序:作为整个脚本的入口,是整个系统的命脉。

  • 配置文件:是一个控制中心,用它来开关各个子程序,指定各个相关联的日志文件。

  • 子程序:这个才是真正的监控脚本,用来监控各个指标。

  • 邮件引擎:使用一个Python程序来实现,它可以定义发邮件的服务器、发邮件人以及发件人密码。

  • 输出日志:整个监控系统要有日志输出。

  • Shell项目-告警系统main.sh

  • #!/bin/bash

  • #written by aming

  • #是否发送邮件的开关

  • export send=1

  • #过滤ip地址

  • export addr=’/sbin/ifconfig |grep -A1 ‘eth0’ |awk ‘/inet/ {print $2}’’

  • #eth0根据你要上报的ip更改网卡

  • 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_mom_502=1’ $conf_file; then

  • export log=’grep ‘logfile=’ $conf_file |awk -F ‘=’ ‘{print $2}’ |sed ‘s/ //g’’

  • /bin/bash ../shares/502.sh

  • fi

  • Shell项目-告警系统配置文件

  • mon.conf内容

  • ##to config the optinons fi to monitor

  • ##定义mysql的服务器地址、端口一级user、password

  • to mon_cdb=0

  • ##0 or 1, default 0,0 not monitor,1 monitor

  • db_ip=10.20.3.13

  • db_port=3315

  • db_user=username

  • db_pass=passwd

  • ##httpd 如果是1则监控,为0则不监控

  • to_mon_httpd=0

  • ##php 如果是1则监控,为0则不监控

  • to_mon_php_socket=0

  • ##http_code_502 需要定义访问日志的路径

  • to_mon_502=1

  • logfile=/data/log/xxx.xxx.com/access.log

  • ##request_count 定义日志路径以及域名

  • to_mon_request_count=0

  • req_log=/data/log/www.discuz.net/access.log

  • domainname=www.discuz.net

  • shell项目-告警系统load.sh

  • #!/bin/bash

  • ##writen by aming##

  • load=’uptime |awk -F ‘average:’ ‘{print $2}’ |cut -d’.’ -f1|sed ‘s/ //g’ |cut -d. f1’

  • if [ $load -gt 10 ] && [$send -eq “1” ]

  • then

  • echo “addr ‘date +%T’ load is $load” >../log/load.tmp

  • /bin/bash ../mail/mail.sh $addr_load $load ../log/load.tmp

  • fi

  • echo “’date +%T’ load is $load”

  • Shell项目-告警系统502.sh

  • 502.sh内容

  • #!/bin/bash

  • d=’date -d “-1 min” +%H:%M’

  • c_502=’grep :$d: $log |grep ‘502’|wc -l’

  • if [ $c_502 -gt 10 ] && [ $send == 1 ]; then

  • echo “$addr $d 502 count is $c_502”>../log/502.tmp

  • /bin/bash ../mail/mail.sh $addr_502 $c_502 ../log/502.tmp

  • fi

  • echo “’date +%T’ 502 $c_502”

  • Shell项目-告警系统disk.sh

  • #!/bin/bash

  • ##writen by aming##

  • rm -f ../log/disk.tmp

  • for r in ‘df -h |awk -F ‘[ %]+’ ‘{print $5}’|grep -v Use’

  • do

  • if [ $r -gt 90 ] && [ $send -eq “1” ]

  • then

  • echo “$addr ‘date +%T’ disk useage is $r” >>../log/disk.tmp

  • fi

  • if [ -f ../log/disk.tmp ]

  • then

  • df -h >> ../log/disk.tmp

  • /bin/bash ../mail/mail.sh $addr_disk $r ../log/disk.tmp

  • echo “’date +%T’ disk useage is nook”

  • else

  • echo “’date +%T’ disk useage is ok”

  • fi

  • Shell项目-告警系统mail.sh

  • log=$1

  • t_s=’date +%s’

  • t_s2=’date -d “2 hours ago” +%s’

  • if [ 1 -f /tmp/$log ]

  • then

  • echo $t_s2 > /tmp/$log

  • fi

  • t_s2=’tail -1 /tmp/$log |awk ‘{print $1}’’

  • echo $t_s>>/tmp/$log

  • v=$[$t_s-$t_s2]

  • echo $v

  • if [ $v -gt 3600 ]

  • then

  • ./mail.py $1 $2 $3

  • echo “0” > /tmp/$log.txt

  • else

  • if [ ! -f /tmp/$log.txt

  • then

  • echo “0” > /tmp/$log.txt

  • fi

  • nu=’cat /tmp/$log.txt’

  • nu2=$[$nu+1]

  • echo $nu2>/tmp/$log.txt

  • if [ $nu2 -gt 10 ]

  • then

  • ./mail.py $1 “trouble continue 10 min $2 ” “$3”

  • echo “0” > /tmp/$log.txt

  • fi

  • fi

  • 运行告警系统

  • cd /usr/local/sbin/mon/bin

  • bash main.sh

转载于:https://my.oschina.net/u/4095969/blog/3063590

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值