zoukankan      html  css  js  c++  java
  • shell中的函数、数组、报警系统脚本

    1、shell中的函数

    函数就是把一段代码整理到了一个小单元中,并给这个小单元起一个名字,当用到这段代码时直接调用这 
    个小单元的名字即可。
    格式: function f_name() {
    commond

     函数必须要放在脚本的最前面
    案例1:

    #!/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 $2

     函数中的运算:
    案例1:

    #!/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:" c

    sum $a $b $c

     ip 显示函数(花了很长时间才把所有的给整合好,尤其是在输入数字时,显示对应的网卡和IP):

    #!/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

     

    2、数组
    @ 或 * 号

    定义数组 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})

     

    3、报警系统主脚本

    #!/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

  • 相关阅读:
    NOIP201208同余方程
    NOIP模拟赛 最佳组合
    NOIP模拟赛 拓展
    CF1253E Antenna Coverage(DP)
    LOJ6033「雅礼集训 2017 Day2」棋盘游戏 (博弈论,二分图,匈牙利算法)
    CF582E Boolean Function(DP,状态压缩,FMT)
    CF750G New Year and Binary Tree Paths(DP)
    Codeforces Round 596 题解
    AGC008E Next or Nextnext(组合计数,神奇思路)
    ARC082E ConvexScore(神奇思路)
  • 原文地址:https://www.cnblogs.com/dongjieyuan/p/10467699.html
Copyright © 2011-2022 走看看