• linux100day(day8)--shell监控脚本练习


    这是一个大型的监控脚本,方便于查看硬盘,网络,负载,内核版本等系统信息。

     本脚本来自于github的atarallo,我对脚本做出了改编和一些注释,尽量让新手也能理解,这个脚本逻辑清楚简单,适合用于练习。

    脚本运行效果

    脚本代码

      1 #!/bin/bash
      2 # Author: fissure
      3 # Blog: https://home.cnblogs.com/Y139147/
      4 # Time: 2019-09-06 09:50:54
      5 # Name: system_monitor.sh
      6 # Version: v1.0
      7 # Description: This is a Script.
      8 # Linux大型shell脚本实现系统监控
      9 while getopts ivh name
     10 # 获取用户传递的参数,如 monitor -i -h之类
     11 do 
     12     case $name in
     13         i)ioption=1;;
     14         #安装
     15         v)voption=1;;
     16         #查看版本信息
     17         h)hoption=1;;
     18         #查看帮助
     19         *)echo "请输入正确的参数";;
     20     esac
     21 done
     22 #
     23 #安装选项
     24 if [[ ! -z $ioption  ]];then
     25     {
     26     wd=$(pwd)
     27     basename "$(test -L "$0"&& readlink "$0"||echo "$0")" > /tmp/scriptname
     28     #判断是否存在并为一个连接文件,如果存在,通过readlink来找到他的路径
     29     #如果不存在一个连接文件,就输出文件路径
     30     #使用basename取出文件名
     31     #$0表示shell本身路径
     32     scriptname=$(echo -e -n $wd/ && cat /tmp/scriptname)
     33     su -c "cp $scriptname /usr/bin/monitor" root && echo "脚本安装成功,现在可以运行指令"||echo"安装失败"
     34     #su -c 表示在执行复制时变更账号为root,执行完毕变回原来的用户
     35     }
     36 fi
     37 #
     38 #查看版本信息
     39 if [[ ! -z $voption ]];then
     40     {
     41     echo -e "系统监控器v1.0版本
    感谢宁的使用熬(*^_^*)"
     42     }
     43 fi
     44 #
     45 #帮助选项
     46 if [[ ! -z $hoption ]];then
     47     {
     48     echo -e " -i        安装脚本"
     49     echo -e " -v        查看版本"
     50     echo -e " -h        查看帮助"
     51     }    
     52 fi
     53 
     54 if [[ $# -eq 0 ]];then
     55     {
     56     #清屏
     57     clear
     58     #使用unset释放以定义过的变量
     59     unset tecreset os architecture kernelrelease internalip externalip nameserver loadaverage
     60     #恢复为初始颜色
     61     tecreset=$(tput sgr0)
     62     #检查网络连通性
     63     ping -c 1 www.baidu.com &> /dev/null && echo -e 'E[32m'"网络"$tecreset "连通"||echo -e 'E[32m'"网络"$tecreset "不通"
     64     #查看系统类型
     65     os=$(uname -o)
     66     #查看操作系统的版本和名称
     67     OS=`uname -s`
     68     REV=`uname -r`
     69     MACH=`uname -m`
     70 
     71     GetVersionFromFile()
     72     {
     73     VERSION=`cat $1 | tr "
    " ' '|sed s/.*VERSION.*= //`
     74     }
     75     #Sun公司操作系统    
     76     if [ "${OS}" = "SunOS" ];then
     77         OS=Solaris
     78         #显示处理器类型
     79         ARCH=`uname -p`
     80         OSSTR="${OS} ${REV}(${ARCH} `uname -v`)"
     81     #IBM开发的AIX系统
     82     elif [ "${OS}" = "AIX" ];then
     83         OSSTR="${OS} `oslevel`(`oslevel -r`)"
     84     #Linux
     85     elif [ "${OS}" = "Linux" ];then
     86         KERNEL=`uname -r`
     87         if [ -f /etc/redhat-release ];then
     88             DIST='RedHat'
     89             PSUEDONAME=`cat /etc/redhat-release |sed s/.*(//|sed s/)//`
     90             REV=`cat /etc/redhat-release |sed s/.*release // |sed s/ .*//`
     91         elif [ -f /etc/SUSE-release];then
     92             DIST=`cat /etc/SuSE-release|tr "
    " ' '|sed s/VERSION.*//`
     93             REV=`cat /etc/SuSE-release|tr "
    " ' '| sed s/.*= //` 
     94         elif [ -f /etc/mandrake-release ];then
     95             DIST='Mandrake'
     96             PSUEDNAME=`cat /etc/mandrake-release | sed s/.*(//| sed s/)//`
     97             REV=`cat /etc/mandrake-release | sed s/.*release // | sed s/ .*//`    
     98         elif [ -f /etc/debian_version ];then
     99             DIST="Debian `car /etc/debian_version`"
    100             REV=""
    101             
    102         fi
    103         if ${OSSTR}[ -f /etc/UnitedLinux-release ];then 
    104             DIST="${DIST}[`cat /etc/UnitedLinux-release|tr "
    " ' '|sed s/VERSION.*//`]"
    105         fi
    106     OSSTR="${OS} ${DIST} ${REV}(${PSUEDONAME} ${KERNEL} ${MACH})"
    107     fi
    108     }
    109     #查看操作系统
    110     echo -e 'E[32m'"操作系统版本:"$tecreset $OSSTR
    111     #查看系统的类型
    112     architecture=$(uname -m)
    113     echo -e 'E[32m'"系统类型:" $tecreset $architecture
    114     #查看内核版本
    115     kernelrelease=$(uname -r)
    116     echo -e 'E[32m'"内核版本:" $tecreset $kernelrelease
    117     #查看主机名
    118     echo -e 'E[32m'"主机名:" $tecreset $HOSTNAME
    119     #查看内网ip
    120     internalip=$(hostname -I)
    121     echo -e 'E[32m'"内网IP :" $tecreset $internalip
    122     #查看DNS
    123     nameservers=$(cat /etc/resolv.conf | sed '1 d'|awk '{print $2}')
    124     echo -e 'E[32m'"DNS:" $tecreset $nameservers
    125     #使用who命令查看当前登陆用户
    126     who>/tmp/who
    127     echo -e 'E[32m'"登陆用户" $tecreset && cat /tmp/who
    128     #查看内存使用情况
    129     free -h >/tmp/ramcache
    130     echo -e 'E[32m'"内存使用情况" $tecreset && cat /tmp/ramcache |grep -v "Swap"
    131     #反选Mem  
    132     echo -e 'E[32m'"交换分区使用情况" $tecreset &&cat /tmp/ramcache |grep -v "Mem"
    133     #查看磁盘使用 
    134     df -h |grep 'Filesystem|/dev/sda*'> /tmp/diskusage
    135     echo -e 'E[32m'"磁盘情况" $tecreset && cat /tmp/diskusage
    136     #查看负载,top -n指定迭代次数为一次,-b表示在批处理模式启动,从顶端一直输出到末端,方便输出到其他程序和文件
    137     loadaverage=$(top -n 1 -b|grep "load average:"|awk {'print $10 $11 $12'}|sed s/,//|sed s/.*://)
    138     #换算成百分数
    139     loadaa=$(awk 'BEGIN{print '$loadaverage*100'}')
    140     echo -e 'E[32m'"平均负载" $tecreset $loadaa"%"
    141     #查看系统运行时间
    142     tecuptime=$(uptime |awk '{print $3 $4}'|cut -d"," -f 1)
    143     echo -e 'E[32m'"系统运行时间:"$tecreset $tecuptime
    144     #释放变量
    145     unset tecreset os architecture kernelrelease internalip externalip nameserver loadaverage
    146     #删除临时文件
    147     rm /tmp/who /tmp/ramcache /tmp/diskusage
    148 fi

    脚本运行方式

    1、为脚本添加权限

    2、./脚本名 [-i/-h/-v] -i    安装脚本

    3、输入monitor运行程序

    出处,作者的github https://github.com/atarallo/TECMINT_MONITOR

    本脚本仅用于学习交流

     

  • 相关阅读:
    03:信号与槽,以字体修改为例
    赞不绝口点赞器原作者的撤项信
    钉钉魔铃 铃声切换器 1.0 项目失败
    KC开发组官方网站
    搜索引擎知识
    现在的手机厂家真浮躁
    02:QT的第一个程序
    第一次做编程语言的英语阅读理解
    mysql 报错[Err] [Dtf] 1292
    Mysql 精确查询是否字段中包含某个字符串
  • 原文地址:https://www.cnblogs.com/Y139147/p/11479743.html
Copyright © 2020-2023  润新知