美文网首页
07 - shell之条件判断实战

07 - shell之条件判断实战

作者: 舍是境界 | 来源:发表于2022-03-19 07:05 被阅读0次

    组合命令

    • 使用控制符组合多个命令
      • ;
      • &&
      • ||
    [ a == a ];echo message
    message
    
    [ a == b ];echo message
    message
    
    [ a == a ]&& echo message
    message
    [ a == b ]&& echo message
    
    [ a == a ] || echo message
    [ a == b ] || echo message
    message
    
    [ a == a ] && echo message || echo Y
    message
    
    [ a == a ] && echo message && echo Y
    message
    Y
    
    
    • 使用&&||进行多个条件的判断
      • [ 判断1 ] && [ 判断2 ]
      • [ 判断1 ] || [ 判断2 ]
      • [ a == a ] && [ 3 -gt 2 ]
      • [ a == a ] || [ 3 -gt 2 ]
    [ a == a ] && [ 3 -gt 2 ]; echo $?
    0
    
    [ a == a ] || [ 3 -gt 2 ]; echo $?
    0
    

    基础命令

    • tr -s 删除多余重复的字符串
    echo "a  b  c" | tr -s " " #删除多余的空格
    a b c
    
    echo "aaacaaaaabaaaaadaaaaq" | tr -s "a"  #删除多余a
    acabadaq
    
    
    • cut过滤数据
    cut -d: -f1 /etc/passwd  #以冒号为分隔,过滤第一行
    nobody
    root
    daemon
    

    监控系统信息实战

    下面以一段监控服务器信息的脚本文件,做实战演练,脚本如下:

    #!/bin/bash
    #本脚本获取系统各项性能参数指标,并与预设阈值进行比较
    
    #time:时间,loalip:eth0网卡IP,free_mem:剩余内存大小,free_disk:剩余磁盘大小
    #cpu_load:15min平均负载,login_user:登录系统的用户,procs:当前进程数量
    local_time=$(date +"%Y%m%d %H:%M:%S")
    local_ip=$(ifconfig en0 | grep netmask | tr -s " " | cut -d" " -f2)
    free_mem=$(cat /proc/meminfo | grep Avai|tr -s " " | cut -d" " -f2)
    free_disk=$(df | grep "/$" | tr -s " " | cut -d" " -f4)
    cpu_load=$(cat /proc/loadavg|cut -d' ' -f3)
    login_user=$(who|wc -l)
    procs=$(ps aux|wc -li)
    
    [ $free_mem -lt 1048576 ] && echo "$local_time Free memory not enough. free_mem:$free_mem on $local_ip" | mail -s Warning root@localhost
    #当磁盘不足10G时发送邮件给root进行报警
    [ $free_disk -lt 10485760 ] && echo "$local_time Free disk not enough. root_free_disk: $free_disk on $local_ip" | mail -s warning root@localhost
    
    #当cpu的15min平均负载超过4时,发邮件告警
    result=$(echo "$cpu_load > 4" |bc)
    [ $result -eq 1 ] && echo "$local_time cpu load to high cpu 15 averageload:$cpu_load on $local_ip"|main -s warning root@localhost
    #当系统实时在线人数超过3人,发送邮件告警
    [ $login_user -gt 3 ] && echo "$local_user users login to $local_ip" | mail -s warning root@localhost
    
    #当进程数量大于500时告警
    [ $procs -gt 500 ] && echo "$local_time Too many procs. $procs proc are running on $local_ip" | mail -s warning root@localhost
    

    小结

    • 命令的控制操作符
    • 使用基础条件判断实现系统监控功能

    相关文章

      网友评论

          本文标题:07 - shell之条件判断实战

          本文链接:https://www.haomeiwen.com/subject/nydldrtx.html