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

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

脚本运行效果

脚本代码

 #!/bin/bash
# Author: fissure
# Blog: https://home.cnblogs.com/Y139147/
# Time: -- ::
# Name: system_monitor.sh
# Version: v1.
# Description: This is a Script.
# Linux大型shell脚本实现系统监控
while getopts ivh name
# 获取用户传递的参数,如 monitor -i -h之类
do
case $name in
i)ioption=;;
#安装
v)voption=;;
#查看版本信息
h)hoption=;;
#查看帮助
*)echo "请输入正确的参数";;
esac
done
#
#安装选项
if [[ ! -z $ioption ]];then
{
wd=$(pwd)
basename "$(test -L "$"&& readlink "$"||echo "$")" > /tmp/scriptname
#判断是否存在并为一个连接文件,如果存在,通过readlink来找到他的路径
#如果不存在一个连接文件,就输出文件路径
#使用basename取出文件名
#$0表示shell本身路径
scriptname=$(echo -e -n $wd/ && cat /tmp/scriptname)
su -c "cp $scriptname /usr/bin/monitor" root && echo "脚本安装成功,现在可以运行指令"||echo"安装失败"
#su -c 表示在执行复制时变更账号为root,执行完毕变回原来的用户
}
fi
#
#查看版本信息
if [[ ! -z $voption ]];then
{
echo -e "系统监控器v1.0版本\n感谢宁的使用熬(*^_^*)"
}
fi
#
#帮助选项
if [[ ! -z $hoption ]];then
{
echo -e " -i 安装脚本"
echo -e " -v 查看版本"
echo -e " -h 查看帮助"
}
fi if [[ $# -eq ]];then
{
#清屏
clear
#使用unset释放以定义过的变量
unset tecreset os architecture kernelrelease internalip externalip nameserver loadaverage
#恢复为初始颜色
tecreset=$(tput sgr0)
#检查网络连通性
ping -c www.baidu.com &> /dev/null && echo -e '\E[32m'"网络"$tecreset "连通"||echo -e '\E[32m'"网络"$tecreset "不通"
#查看系统类型
os=$(uname -o)
#查看操作系统的版本和名称
OS=`uname -s`
REV=`uname -r`
MACH=`uname -m` GetVersionFromFile()
{
VERSION=`cat $ | tr "\n" ' '|sed s/.*VERSION.*=\ //`
}
#Sun公司操作系统
if [ "${OS}" = "SunOS" ];then
OS=Solaris
#显示处理器类型
ARCH=`uname -p`
OSSTR="${OS} ${REV}(${ARCH} `uname -v`)"
#IBM开发的AIX系统
elif [ "${OS}" = "AIX" ];then
OSSTR="${OS} `oslevel`(`oslevel -r`)"
#Linux
elif [ "${OS}" = "Linux" ];then
KERNEL=`uname -r`
if [ -f /etc/redhat-release ];then
DIST='RedHat'
PSUEDONAME=`cat /etc/redhat-release |sed s/.*\(//|sed s/\)//`
REV=`cat /etc/redhat-release |sed s/.*release\ // |sed s/\ .*//`
elif [ -f /etc/SUSE-release];then
DIST=`cat /etc/SuSE-release|tr "\n" ' '|sed s/VERSION.*//`
REV=`cat /etc/SuSE-release|tr "\n" ' '| sed s/.*=\ //`
elif [ -f /etc/mandrake-release ];then
DIST='Mandrake'
PSUEDNAME=`cat /etc/mandrake-release | sed s/.*\(//| sed s/\)//`
REV=`cat /etc/mandrake-release | sed s/.*release\ // | sed s/\ .*//`
elif [ -f /etc/debian_version ];then
DIST="Debian `car /etc/debian_version`"
REV="" fi
if ${OSSTR}[ -f /etc/UnitedLinux-release ];then
DIST="${DIST}[`cat /etc/UnitedLinux-release|tr "\n" ' '|sed s/VERSION.*//`]"
fi
OSSTR="${OS} ${DIST} ${REV}(${PSUEDONAME} ${KERNEL} ${MACH})"
fi
}
#查看操作系统
echo -e '\E[32m'"操作系统版本:"$tecreset $OSSTR
#查看系统的类型
architecture=$(uname -m)
echo -e '\E[32m'"系统类型:" $tecreset $architecture
#查看内核版本
kernelrelease=$(uname -r)
echo -e '\E[32m'"内核版本:" $tecreset $kernelrelease
#查看主机名
echo -e '\E[32m'"主机名:" $tecreset $HOSTNAME
#查看内网ip
internalip=$(hostname -I)
echo -e '\E[32m'"内网IP :" $tecreset $internalip
#查看DNS
nameservers=$(cat /etc/resolv.conf | sed '1 d'|awk '{print $2}')
echo -e '\E[32m'"DNS:" $tecreset $nameservers
#使用who命令查看当前登陆用户
who>/tmp/who
echo -e '\E[32m'"登陆用户" $tecreset && cat /tmp/who
#查看内存使用情况
free -h >/tmp/ramcache
echo -e '\E[32m'"内存使用情况" $tecreset && cat /tmp/ramcache |grep -v "Swap"
#反选Mem
echo -e '\E[32m'"交换分区使用情况" $tecreset &&cat /tmp/ramcache |grep -v "Mem"
#查看磁盘使用
df -h |grep 'Filesystem\|/dev/sda*'> /tmp/diskusage
echo -e '\E[32m'"磁盘情况" $tecreset && cat /tmp/diskusage
#查看负载,top -n指定迭代次数为一次,-b表示在批处理模式启动,从顶端一直输出到末端,方便输出到其他程序和文件
loadaverage=$(top -n -b|grep "load average:"|awk {'print $10 $11 $12'}|sed s/,//|sed s/.*://)
#换算成百分数
loadaa=$(awk 'BEGIN{print '$loadaverage*'}')
echo -e '\E[32m'"平均负载" $tecreset $loadaa"%"
#查看系统运行时间
tecuptime=$(uptime |awk '{print $3 $4}'|cut -d"," -f )
echo -e '\E[32m'"系统运行时间:"$tecreset $tecuptime
#释放变量
unset tecreset os architecture kernelrelease internalip externalip nameserver loadaverage
#删除临时文件
rm /tmp/who /tmp/ramcache /tmp/diskusage
fi

脚本运行方式

1、为脚本添加权限

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

3、输入monitor运行程序

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

本脚本仅用于学习交流

linux100day(day8)--shell监控脚本练习的更多相关文章

  1. shell监控脚本

    序言: 前几天一好友问我服务器监控怎么做?你们公司的监控是怎么做的?有什么开源的监控软件推荐?常见的开源的监控软件当然首先推荐ZABBIX,分布式够强大,而且很多公司都在用,我问他具体什么需求,能监控 ...

  2. shell监控脚本实例—监控mysql主从复制

    分享一例shell脚本,用于监测mysql数据库的主从复制,有需要的朋友不妨参考学习下. 转自:http://www.jbxue.com/article/14103.html(转载请注明出处) 本节内 ...

  3. shell监控脚本,不考虑多用户情况

    #!/bin/bash CheckProcess() { if [ "$1" = "" ]; then fi PROCESS_NUM=`ps -ef | gre ...

  4. centos shell编程6一些工作中实践脚本 nagios监控脚本 自定义zabbix脚本 mysql备份脚本 zabbix错误日志 直接送给bc做计算 gzip innobackupex/Xtrabackup 第四十节课

    centos   shell编程6一些工作中实践脚本   nagios监控脚本 自定义zabbix脚本 mysql备份脚本 zabbix错误日志  直接送给bc做计算  gzip  innobacku ...

  5. Linux 服务器系统监控脚本 Shell【转】

    转自: Linux 服务器系统监控脚本 Shell - 今日头条(www.toutiao.com)http://www.toutiao.com/i6373134402163048961/ 本程序在Ce ...

  6. 第五部分shell项目一监控脚本

    需求: 使用shell定制各种个性化告警工具,但需要统一化管理.规范化管理. 思路:指定一个脚本包,包含主程序.子程序.配置文件.邮件引擎.输出日志等.主程序:作为整个脚本的入口,是整个系统的命脉.配 ...

  7. zabbix客户端监控脚本shell

    zabbix客户端监控脚本shell #!/bin/sh sleep 3 zabbixdir=`pwd` zabbix_version=4.2.5 ###指定版本,最好和server端吻合版本,可以自 ...

  8. Linux系统性能统计工具Sar和实时系统性能监控脚本

    sar(System Activity Reporter系统活动情况报告)是目前 Linux 上最为全面的系统性能分析工具之一,可以从多方面对系统的活动进行报告,包括:文件的读写情况.系统调用的使用情 ...

  9. oracle监控脚本

    简单命令 1.显示服务器上的可用实例:ps -ef | grep smon2.显示服务器上的可用监听器:ps -ef | grep -i listener | grep -v grep3.查看Orac ...

随机推荐

  1. Tab选项卡 延迟切换效果js实现

    try.html <!DOCTYPE html> <html> <head> <meta charset="utf-8"> < ...

  2. canvas 操作像素 窗帘效果

    代码实例: <!DOCTYPE html> <html> <head> <style> canvas{ background:#eee; } </ ...

  3. 人生苦短_我用Python_pymysql库对Mysql数据库操作_009

    # coding=utf-8 import pymysql ''' 数据库的登录信息: config={ 'host':'118.126.108.xxx', # :主机 'user':'python' ...

  4. 【leetcode】1024. Video Stitching

    题目如下: You are given a series of video clips from a sporting event that lasted Tseconds.  These video ...

  5. 微信小程序中显示html富文本的方法

    微信小程序中显示html富文本的方法 使用方法:git地址:https://github.com/icindy/wxParse 一.下载wxParse文件 二.在要引入的页面的js文件中,引入文件 j ...

  6. 如何隐藏一个让人很难发现的bug?

    程序员的日常三件事:写bug.改bug.背锅.连程序员都自我调侃道,为什么每天都在加班?因为我的眼里常含bug. 那么如何写出一个让(坑)人(王)很(之)难(王)发现的bug呢? - 1 - 新手开发 ...

  7. 转载--关于FPGA设计数字信号处理电路的心得

    FPGA使用的越来越广泛,除了可用于设计控制电路以为,数字信号处理电路更是FPGA的强项和难点.个人可以说才刚刚入门FPGA设计,也做过一些数字信号处理方面的电路设计,记录下个人心得体会. (一)善用 ...

  8. 【MySQL】实现自增函数sequence

    前言 当前数据库为:mysql由于mysql和oracle不太一样,不支持直接的sequence,所以需要创建一张table来模拟sequence的功能,理由sql语句如下: 步骤 1.创建seque ...

  9. 点击按钮后URL呗改变

    这里留个坑,Button默认类型是submit.没有写类型的,可能会导致触发Url改变.要么写类型,要么在按钮对应的Js方法里return.

  10. 使用ajax前必须了解的知识

    ajax的全称: asynchronous javascript and xml (异步的javascript和xml) ajax不是某种编程语言 是一种在无需重新加载整个页面的情况下能够更新部分网页 ...