Shell实战之系统信息分析

案例介绍

利用shell脚本获取系统的信息和系统当前状态信息,如系统的名称版本,系统当前的负载,磁盘使用情况等。

该案例一共包括两个脚本文件:
1、monitor.sh (主控制脚本)
2、sys_monitor.sh(系统信息监控脚本文件)
3、test.sh (测试主控脚本,没什么实际用处)

准备

在linux上新建一个文件夹shell1,然后在里面新建三个.sh文件:monitor.sh、sys_monitor.sh

开始写代码

第一步:先写主控脚本:monitor.sh

cd shell1
vim monitor.sh
#monitor.sh
#!/bin/bash
i=0
#${tput sgr0}可以设置echo -e的结束颜色为系统默认颜色
reset=$(tput sgr0)
number=""
#声明关联数组,关联数组的索引可以是字符串
declare -A reArr
#取出shell1中的除了"monitor.sh"的每个文件,
for script_file in $(ls -I 'monitor.sh')
        do
                echo -e "\e[1;36m" ${i} ${script_file} "==>" ${reset}
                #用关联数组reArr保存文件的索引和文件名
                reArr[$i]=${script_file}
                number="${number} | ${i}"
                #索引自增
                i=$(( i+1 ))
        done
echo ${number}
while true
        do
                read -t 30 -p "please input number : " num 
                echo $num
                #用户输入的不是0-1,退出
                if [[  $num != [0-1] ]]
                        then
                                exit 1
                fi
                #用户输入的0-1,执行该脚本文件
                sh ./${reArr[$num]}
        done

第二步:写测试脚本:test.sh (此时仍然在shell1文件夹下)

vim test.sh
# test.sh
#!/bin/bash

echo "test!"

第四步:测试主控脚本

vim monitor.sh

这里写图片描述
test.sh索引为1,按提示输入数字1,打印出”test!”,说明主控脚本测试成功!

第五步:编写系统信息监控脚本

vim sys_monitor.sh

需要输出的系统信息有:
系统名称: uname -o
系统名字和版本: cat /etc/issue | grep "release"
系统体系结构: uanme -m
主机名:${HOSTNAME}
内部IP:hostname -I
外部IP: curl -s http://ipecho.net/plain
查询网络是否联通:ping -c 2 某个域名 测试是否能联通
登录服务器的用户: who
查询系统已使用内存,MemTotal-MemFree:

awk '/MemTotal/{memTotal=$2}/MemFree/{memFree=$2}END{print "system_used_memory:" (memTotal-memFree)/1024 "M"}' /proc/meminfo

查询系统上应用使用的内存:MemTotal-MemFree-Cache(缓存)-Buffers(缓冲):

 awk '/MemTotal/{memTotal=$2}/MemFree/{memFree=$2}/^Cashed/{cashed=$2}/Buffers/{buffers=$2}END{print "apps_used_memory:" (memTotal-memFree-cashed-buffers)/1024 "M"}'  /proc/meminfo

系统最近的平均负载:top -n 1 | sed -n '1p' | awk '{print "load average: "$12 $13 $14}'

磁盘使用情况:df -h | sed -n '2p' | awk '{print "disk_name:"$1 " size:"$2" used:"$5}'

系统监控脚本代码

#!/bin/bash

clear
reset=$(tput sgr0)
if [[ $# -eq 0 ]]
        then
                echo "os_name: $(uname -o)"
                echo "os name and version:" $(cat /etc/issue | grep -e "release")
                echo "architecture: $(uname -m)"
                echo "hostname: ${HOSTNAME}"
                echo -e "internal ip: \e[32m $(hostname -I)" ${reset}
                echo -e "external ip:\e[32m $(curl -s http://ipecho.net/plain)" ${reset}
                ping -c 2 "www.baidu.com" &> /dev/null && echo "Internet Connected" || echo "Internet Disconnected"
                who > /tmp/who
                echo -e "\e[32m Logged in Users:" $reset  && cat /tmp/who
                rm -f /tmp/who
                awk '/MemTotal/{memTotal=$2}/MemFree/{memFree=$2}END{print "system_used_memory:" (memTotal-memFree)/1024 "M"}' /proc/meminfo
                awk '/MemTotal/{memTotal=$2}/MemFree/{memFree=$2}/^Cashed/{cashed=$2}/Buffers/{buffers=$2}END{print "apps_used_memory:" (memTotal-memFree-cashed-buffers)/1024 "M"}' /proc/meminfo                
                top -n 1 | sed -n '1p' | awk '{print "load average: "$12 $13 $14}'
                df -h | sed -n '2p' | awk '{print "disk_name:"$1 "  size:"$2"  used:"$5}'
fi
~    

第六步:测试监控脚本

sh monitor.sh

按提示输入数字0:
这里写图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值